2018-12-10 19:24:46 +00:00
|
|
|
"""
|
|
|
|
Test that --cache-from is passed in to docker API properly.
|
|
|
|
"""
|
2018-12-17 12:11:45 +00:00
|
|
|
|
|
|
|
from unittest.mock import MagicMock
|
|
|
|
|
2018-12-10 19:24:46 +00:00
|
|
|
import docker
|
2018-12-17 12:11:45 +00:00
|
|
|
|
2018-12-11 06:46:06 +00:00
|
|
|
from repo2docker.buildpacks import BaseImage, DockerBuildPack, LegacyBinderDockerBuildPack
|
2018-12-10 19:24:46 +00:00
|
|
|
|
2018-12-17 12:11:45 +00:00
|
|
|
|
|
|
|
def test_cache_from_base(tmpdir):
|
2018-12-10 19:24:46 +00:00
|
|
|
FakeDockerClient = MagicMock()
|
|
|
|
cache_from = [
|
|
|
|
'image-1:latest'
|
|
|
|
]
|
2018-12-11 06:46:06 +00:00
|
|
|
fake_log_value = {'stream': 'fake'}
|
2018-12-10 19:24:46 +00:00
|
|
|
fake_client = MagicMock(spec=docker.APIClient)
|
2018-12-11 06:46:06 +00:00
|
|
|
fake_client.build.return_value = iter([fake_log_value])
|
2018-12-10 19:24:46 +00:00
|
|
|
|
2018-12-17 12:11:45 +00:00
|
|
|
# Test base image build pack
|
|
|
|
tmpdir.chdir()
|
|
|
|
for line in BaseImage().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
|
2018-12-11 06:46:06 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2018-12-17 12:11:45 +00:00
|
|
|
def test_cache_from_docker(tmpdir):
|
2018-12-11 06:46:06 +00:00
|
|
|
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])
|
|
|
|
|
2018-12-17 12:11:45 +00:00
|
|
|
tmpdir.chdir()
|
|
|
|
# test dockerfile
|
|
|
|
with tmpdir.join("Dockerfile").open('w') as f:
|
|
|
|
f.write('FROM scratch\n')
|
2018-12-11 06:46:06 +00:00
|
|
|
|
2018-12-17 12:11:45 +00:00
|
|
|
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
|
2018-12-11 06:46:06 +00:00
|
|
|
|
|
|
|
|
2018-12-17 12:11:45 +00:00
|
|
|
def test_cache_from_legacy(tmpdir):
|
2018-12-11 06:46:06 +00:00
|
|
|
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])
|
|
|
|
|
2018-12-17 12:11:45 +00:00
|
|
|
# Test legacy docker image
|
|
|
|
with tmpdir.join("Dockerfile").open('w') as f:
|
|
|
|
f.write('FROM andrewosh/binder-base\n')
|
2018-12-11 06:46:06 +00:00
|
|
|
|
2018-12-17 12:11:45 +00:00
|
|
|
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
|
2018-12-11 06:46:06 +00:00
|
|
|
|