11package org .cloudfoundry .multiapps .mta .builders ;
22
3- import static org .junit .jupiter .api .Assertions .assertEquals ;
4- import static org .junit .jupiter .api .Assertions .assertThrows ;
3+ import org .cloudfoundry .multiapps .common .ContentException ;
4+ import org .cloudfoundry .multiapps .mta .Constants ;
5+ import org .cloudfoundry .multiapps .mta .Messages ;
6+ import org .cloudfoundry .multiapps .mta .model .DeploymentDescriptor ;
7+ import org .cloudfoundry .multiapps .mta .model .ExtensionDescriptor ;
8+ import org .junit .jupiter .api .Test ;
59
610import java .text .MessageFormat ;
711import java .util .Arrays ;
812import java .util .Collections ;
913import java .util .List ;
1014
11- import org .cloudfoundry .multiapps .common .ContentException ;
12- import org .cloudfoundry .multiapps .mta .Messages ;
13- import org .cloudfoundry .multiapps .mta .model .DeploymentDescriptor ;
14- import org .cloudfoundry .multiapps .mta .model .ExtensionDescriptor ;
15- import org .junit .jupiter .api .Test ;
15+ import static org .junit .jupiter .api .Assertions .assertEquals ;
16+ import static org .junit .jupiter .api .Assertions .assertSame ;
17+ import static org .junit .jupiter .api .Assertions .assertThrows ;
1618
1719class ExtensionDescriptorChainBuilderTest {
1820
@@ -50,8 +52,9 @@ void testBuildWithDescriptorWithUnknownParent() {
5052 ContentException contentException = assertThrows (ContentException .class ,
5153 () -> extensionDescriptorChainBuilder .build (deploymentDescriptor ,
5254 extensionDescriptors ));
53- String expectedMessage = MessageFormat .format (Messages .CANNOT_BUILD_EXTENSION_DESCRIPTOR_CHAIN_BECAUSE_DESCRIPTORS_0_HAVE_AN_UNKNOWN_PARENT ,
54- extensionDescriptor2 .getId ());
55+ String expectedMessage = MessageFormat .format (
56+ Messages .CANNOT_BUILD_EXTENSION_DESCRIPTOR_CHAIN_BECAUSE_DESCRIPTORS_0_HAVE_AN_UNKNOWN_PARENT ,
57+ extensionDescriptor2 .getId ());
5558
5659 assertEquals (expectedMessage , contentException .getMessage ());
5760 }
@@ -102,6 +105,96 @@ void testLaxBuildWithMultipleDescriptorsExtendingTheSameParent() {
102105 assertEquals (Collections .emptyList (), extensionDescriptorChain );
103106 }
104107
108+ @ Test
109+ void testBuildWithNormalAndSecureExtensionDescriptorsWhereSecureIsLastInTheChain () {
110+ DeploymentDescriptor deploymentDescriptor = buildDeploymentDescriptor (FOO_ID );
111+ ExtensionDescriptor normalExtensionDescriptor = buildExtensionDescriptor (BAR_ID , FOO_ID );
112+ ExtensionDescriptor secureExtensionDescriptor = buildSecureExtensionDescriptor (FOO_ID );
113+
114+ List <ExtensionDescriptor > extensionDescriptors = List .of (secureExtensionDescriptor , normalExtensionDescriptor );
115+
116+ ExtensionDescriptorChainBuilder extensionDescriptorChainBuilder = new ExtensionDescriptorChainBuilder ();
117+ List <ExtensionDescriptor > extensionDescriptorChain = extensionDescriptorChainBuilder .build (deploymentDescriptor ,
118+ extensionDescriptors );
119+
120+ assertEquals (List .of (normalExtensionDescriptor , secureExtensionDescriptor ), extensionDescriptorChain );
121+ }
122+
123+ @ Test
124+ void testBuildWithOnlySecureExtensionDescriptor () {
125+ DeploymentDescriptor deploymentDescriptor = buildDeploymentDescriptor (FOO_ID );
126+ ExtensionDescriptor secureExtensionDescriptor = buildSecureExtensionDescriptor (FOO_ID );
127+
128+ List <ExtensionDescriptor > extensionDescriptors = Collections .singletonList (secureExtensionDescriptor );
129+
130+ ExtensionDescriptorChainBuilder extensionDescriptorChainBuilder = new ExtensionDescriptorChainBuilder ();
131+ List <ExtensionDescriptor > extensionDescriptorChain = extensionDescriptorChainBuilder .build (deploymentDescriptor ,
132+ extensionDescriptors );
133+
134+ assertEquals (Collections .singletonList (secureExtensionDescriptor ), extensionDescriptorChain );
135+ }
136+
137+ @ Test
138+ void testBuildWhenSecureExtensionDescriptorIsExtendedStrictMode () {
139+ DeploymentDescriptor deploymentDescriptor = buildDeploymentDescriptor (FOO_ID );
140+ ExtensionDescriptor firstExtensionDescriptor = buildExtensionDescriptor (BAR_ID , FOO_ID );
141+ ExtensionDescriptor secureExtensionDescriptor = buildSecureExtensionDescriptor (BAR_ID );
142+ ExtensionDescriptor extensionDescriptorAfterSecureOne = buildExtensionDescriptor (QUX_ID , Constants .SECURE_EXTENSION_DESCRIPTOR_ID );
143+
144+ List <ExtensionDescriptor > extensionDescriptors = List .of (extensionDescriptorAfterSecureOne , firstExtensionDescriptor ,
145+ secureExtensionDescriptor );
146+
147+ ExtensionDescriptorChainBuilder extensionDescriptorChainBuilder = new ExtensionDescriptorChainBuilder (true );
148+
149+ ContentException contentException = assertThrows (ContentException .class ,
150+ () -> extensionDescriptorChainBuilder .build (deploymentDescriptor ,
151+ extensionDescriptors ));
152+
153+ String expectedMessage = MessageFormat .format (
154+ Messages .CANNOT_BUILD_EXTENSION_DESCRIPTOR_CHAIN_BECAUSE_DESCRIPTORS_0_HAVE_AN_UNKNOWN_PARENT ,
155+ extensionDescriptorAfterSecureOne .getId ()
156+ );
157+ assertEquals (expectedMessage , contentException .getMessage ());
158+ }
159+
160+ @ Test
161+ void testBuildWhenSecureExtensionDescriptorIsExtendedNonStrictMode () {
162+ DeploymentDescriptor deploymentDescriptor = buildDeploymentDescriptor (FOO_ID );
163+ ExtensionDescriptor firstExtensionDescriptor = buildExtensionDescriptor (BAR_ID , FOO_ID );
164+ ExtensionDescriptor secureExtensionDescriptor = buildSecureExtensionDescriptor (BAR_ID );
165+ ExtensionDescriptor extensionDescriptorAfterSecureOne = buildExtensionDescriptor (QUX_ID , Constants .SECURE_EXTENSION_DESCRIPTOR_ID );
166+
167+ List <ExtensionDescriptor > extensionDescriptors = List .of (extensionDescriptorAfterSecureOne , secureExtensionDescriptor ,
168+ firstExtensionDescriptor );
169+
170+ ExtensionDescriptorChainBuilder extensionDescriptorChainBuilder = new ExtensionDescriptorChainBuilder (false );
171+ List <ExtensionDescriptor > extensionDescriptorChain = extensionDescriptorChainBuilder .build (deploymentDescriptor ,
172+ extensionDescriptors );
173+
174+ assertEquals (List .of (firstExtensionDescriptor , secureExtensionDescriptor ), extensionDescriptorChain );
175+ }
176+
177+ @ Test
178+ void testBuildWhenTwoSecureExtensionDescriptorsWhereOnlyTheLastOneGetsAppended () {
179+ DeploymentDescriptor deploymentDescriptor = buildDeploymentDescriptor (FOO_ID );
180+ ExtensionDescriptor firstExtensionDescriptor = buildExtensionDescriptor (BAR_ID , FOO_ID );
181+ ExtensionDescriptor firstSecureExtensionDescriptor = buildSecureExtensionDescriptor (FOO_ID );
182+ ExtensionDescriptor secondSecureExtensionDescriptor = buildSecureExtensionDescriptor (FOO_ID );
183+
184+ List <ExtensionDescriptor > extensionDescriptors = List .of (firstSecureExtensionDescriptor , firstExtensionDescriptor ,
185+ secondSecureExtensionDescriptor );
186+
187+ ExtensionDescriptorChainBuilder extensionDescriptorChainBuilder = new ExtensionDescriptorChainBuilder ();
188+ List <ExtensionDescriptor > extensionDescriptorChain = extensionDescriptorChainBuilder .build (deploymentDescriptor ,
189+ extensionDescriptors );
190+
191+ assertEquals (2 , extensionDescriptorChain .size ());
192+ assertEquals (firstExtensionDescriptor , extensionDescriptorChain .get (0 ));
193+ assertEquals (Constants .SECURE_EXTENSION_DESCRIPTOR_ID , extensionDescriptorChain .get (1 )
194+ .getId ());
195+ assertSame (secondSecureExtensionDescriptor , extensionDescriptorChain .get (1 ));
196+ }
197+
105198 private DeploymentDescriptor buildDeploymentDescriptor (String id ) {
106199 return DeploymentDescriptor .createV2 ()
107200 .setId (id );
@@ -113,4 +206,10 @@ private ExtensionDescriptor buildExtensionDescriptor(String id, String parentId)
113206 .setId (id );
114207 }
115208
209+ private ExtensionDescriptor buildSecureExtensionDescriptor (String parentId ) {
210+ return ExtensionDescriptor .createV2 ()
211+ .setParentId (parentId )
212+ .setId (Constants .SECURE_EXTENSION_DESCRIPTOR_ID );
213+ }
214+
116215}
0 commit comments