From d035483d1cb221ed53ff7bb35d5f6d3552831596 Mon Sep 17 00:00:00 2001 From: yuvipanda Date: Mon, 10 Dec 2018 22:46:06 -0800 Subject: [PATCH] Add tests for Docker & Legacy Docker buildpacks --- tests/test_cache_from.py | 68 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 5 deletions(-) diff --git a/tests/test_cache_from.py b/tests/test_cache_from.py index 8ce6ac10..6b7c9640 100644 --- a/tests/test_cache_from.py +++ b/tests/test_cache_from.py @@ -4,21 +4,79 @@ Test that --cache-from is passed in to docker API properly. import os import docker from unittest.mock import MagicMock, patch +from repo2docker.buildpacks import BaseImage, DockerBuildPack, LegacyBinderDockerBuildPack from tempfile import TemporaryDirectory -def test_cache_from(monkeypatch): +def test_cache_from_base(monkeypatch): FakeDockerClient = MagicMock() cache_from = [ 'image-1:latest' ] + fake_log_value = {'stream': 'fake'} fake_client = MagicMock(spec=docker.APIClient) - fake_client.build.return_value = iter([{'stream': 'fake'}]) + fake_client.build.return_value = iter([fake_log_value]) with TemporaryDirectory() as d: + # Test base image build pack monkeypatch.chdir(d) - from repo2docker.buildpacks import BaseImage for line in BaseImage().build(fake_client, 'image-2', '1Gi', {}, cache_from): - assert line == {'stream': 'fake'} + assert line == fake_log_value called_args, called_kwargs = fake_client.build.call_args assert 'cache_from' in called_kwargs - assert called_kwargs['cache_from'] == cache_from \ No newline at end of file + assert called_kwargs['cache_from'] == cache_from + + + +def test_cache_from_docker(monkeypatch): + FakeDockerClient = MagicMock() + cache_from = [ + 'image-1:latest' + ] + fake_log_value = {'stream': 'fake'} + fake_client = MagicMock(spec=docker.APIClient) + fake_client.build.return_value = iter([fake_log_value]) + + with TemporaryDirectory() as d: + # Test docker image + with open(os.path.join(d, 'Dockerfile'), 'w') as f: + f.write('FROM scratch\n') + + for line in DockerBuildPack().build(fake_client, 'image-2', '1Gi', {}, cache_from): + assert line == fake_log_value + called_args, called_kwargs = fake_client.build.call_args + assert 'cache_from' in called_kwargs + assert called_kwargs['cache_from'] == cache_from + + # Test legacy docker image + with open(os.path.join(d, 'Dockerfile'), 'w') as f: + f.write('FROM andrewosh/binder-base\n') + + for line in LegacyBinderDockerBuildPack().build(fake_client, 'image-2', '1Gi', {}, cache_from): + print(line) + assert line == fake_log_value + called_args, called_kwargs = fake_client.build.call_args + assert 'cache_from' in called_kwargs + assert called_kwargs['cache_from'] == cache_from + + +def test_cache_from_legacy(monkeypatch): + FakeDockerClient = MagicMock() + cache_from = [ + 'image-1:latest' + ] + fake_log_value = {'stream': 'fake'} + fake_client = MagicMock(spec=docker.APIClient) + fake_client.build.return_value = iter([fake_log_value]) + + with TemporaryDirectory() as d: + # Test legacy docker image + with open(os.path.join(d, 'Dockerfile'), 'w') as f: + f.write('FROM andrewosh/binder-base\n') + + for line in LegacyBinderDockerBuildPack().build(fake_client, 'image-2', '1Gi', {}, cache_from): + assert line == fake_log_value + called_args, called_kwargs = fake_client.build.call_args + assert 'cache_from' in called_kwargs + assert called_kwargs['cache_from'] == cache_from + +