31
31
import org .mockito .invocation .InvocationOnMock ;
32
32
33
33
import org .springframework .boot .buildpack .platform .docker .type .Image ;
34
+ import org .springframework .boot .buildpack .platform .docker .type .ImageReference ;
34
35
import org .springframework .boot .buildpack .platform .io .IOBiConsumer ;
35
36
import org .springframework .boot .buildpack .platform .io .TarArchive ;
36
37
import org .springframework .boot .buildpack .platform .json .AbstractJsonTests ;
40
41
import static org .assertj .core .api .Assertions .fail ;
41
42
import static org .assertj .core .api .Assertions .tuple ;
42
43
import static org .mockito .ArgumentMatchers .any ;
44
+ import static org .mockito .ArgumentMatchers .eq ;
43
45
import static org .mockito .BDDMockito .given ;
44
46
import static org .mockito .BDDMockito .willAnswer ;
45
47
import static org .mockito .Mockito .mock ;
@@ -64,10 +66,11 @@ void setUp() {
64
66
@ Test
65
67
void resolveWhenFullyQualifiedReferenceReturnsBuilder () throws Exception {
66
68
Image image = Image .of (getContent ("buildpack-image.json" ));
69
+ ImageReference imageReference = ImageReference .of ("example/buildpack1:1.0.0" );
67
70
BuildpackResolverContext resolverContext = mock (BuildpackResolverContext .class );
68
- given (resolverContext .fetchImage (any ( ), any ( ))).willReturn (image );
69
- willAnswer (this ::withMockLayers ).given (resolverContext ).exportImageLayers (any ( ), any ());
70
- BuildpackReference reference = BuildpackReference .of ("docker://example/buildpack1:latest " );
71
+ given (resolverContext .fetchImage (eq ( imageReference ), eq ( ImageType . BUILDPACK ))).willReturn (image );
72
+ willAnswer (this ::withMockLayers ).given (resolverContext ).exportImageLayers (eq ( imageReference ), any ());
73
+ BuildpackReference reference = BuildpackReference .of ("docker://example/buildpack1:1.0.0 " );
71
74
Buildpack buildpack = ImageBuildpack .resolve (resolverContext , reference );
72
75
assertThat (
buildpack .
getCoordinates ()).
hasToString (
"example/[email protected] " );
73
76
assertHasExpectedLayers (buildpack );
@@ -76,10 +79,38 @@ void resolveWhenFullyQualifiedReferenceReturnsBuilder() throws Exception {
76
79
@ Test
77
80
void resolveWhenUnqualifiedReferenceReturnsBuilder () throws Exception {
78
81
Image image = Image .of (getContent ("buildpack-image.json" ));
82
+ ImageReference imageReference = ImageReference .of ("example/buildpack1:1.0.0" );
79
83
BuildpackResolverContext resolverContext = mock (BuildpackResolverContext .class );
80
- given (resolverContext .fetchImage (any (), any ())).willReturn (image );
81
- willAnswer (this ::withMockLayers ).given (resolverContext ).exportImageLayers (any (), any ());
82
- BuildpackReference reference = BuildpackReference .of ("example/buildpack1:latest" );
84
+ given (resolverContext .fetchImage (eq (imageReference ), eq (ImageType .BUILDPACK ))).willReturn (image );
85
+ willAnswer (this ::withMockLayers ).given (resolverContext ).exportImageLayers (eq (imageReference ), any ());
86
+ BuildpackReference reference = BuildpackReference .of ("example/buildpack1:1.0.0" );
87
+ Buildpack buildpack = ImageBuildpack .resolve (resolverContext , reference );
88
+ assertThat (
buildpack .
getCoordinates ()).
hasToString (
"example/[email protected] " );
89
+ assertHasExpectedLayers (buildpack );
90
+ }
91
+
92
+ @ Test
93
+ void resolveReferenceWithoutTagUsesLatestTag () throws Exception {
94
+ Image image = Image .of (getContent ("buildpack-image.json" ));
95
+ ImageReference imageReference = ImageReference .of ("example/buildpack1:latest" );
96
+ BuildpackResolverContext resolverContext = mock (BuildpackResolverContext .class );
97
+ given (resolverContext .fetchImage (eq (imageReference ), eq (ImageType .BUILDPACK ))).willReturn (image );
98
+ willAnswer (this ::withMockLayers ).given (resolverContext ).exportImageLayers (eq (imageReference ), any ());
99
+ BuildpackReference reference = BuildpackReference .of ("example/buildpack1" );
100
+ Buildpack buildpack = ImageBuildpack .resolve (resolverContext , reference );
101
+ assertThat (
buildpack .
getCoordinates ()).
hasToString (
"example/[email protected] " );
102
+ assertHasExpectedLayers (buildpack );
103
+ }
104
+
105
+ @ Test
106
+ void resolveReferenceWithDigestUsesDigest () throws Exception {
107
+ Image image = Image .of (getContent ("buildpack-image.json" ));
108
+ String digest = "sha256:4acb6bfd6c4f0cabaf7f3690e444afe51f1c7de54d51da7e63fac709c56f1c30" ;
109
+ ImageReference imageReference = ImageReference .of ("example/buildpack1@" + digest );
110
+ BuildpackResolverContext resolverContext = mock (BuildpackResolverContext .class );
111
+ given (resolverContext .fetchImage (eq (imageReference ), eq (ImageType .BUILDPACK ))).willReturn (image );
112
+ willAnswer (this ::withMockLayers ).given (resolverContext ).exportImageLayers (eq (imageReference ), any ());
113
+ BuildpackReference reference = BuildpackReference .of ("example/buildpack1@" + digest );
83
114
Buildpack buildpack = ImageBuildpack .resolve (resolverContext , reference );
84
115
assertThat (
buildpack .
getCoordinates ()).
hasToString (
"example/[email protected] " );
85
116
assertHasExpectedLayers (buildpack );
@@ -89,7 +120,7 @@ void resolveWhenUnqualifiedReferenceReturnsBuilder() throws Exception {
89
120
void resolveWhenWhenImageNotPulledThrowsException () throws Exception {
90
121
BuildpackResolverContext resolverContext = mock (BuildpackResolverContext .class );
91
122
given (resolverContext .fetchImage (any (), any ())).willThrow (IOException .class );
92
- BuildpackReference reference = BuildpackReference .of ("docker://example/buildpack1:latest " );
123
+ BuildpackReference reference = BuildpackReference .of ("docker://example/buildpack1" );
93
124
assertThatIllegalArgumentException ().isThrownBy (() -> ImageBuildpack .resolve (resolverContext , reference ))
94
125
.withMessageContaining ("Error pulling buildpack image" )
95
126
.withMessageContaining ("example/buildpack1:latest" );
0 commit comments