Skip to content

Commit c89a5a0

Browse files
author
rathnapandi
committed
- fix #576 and include apimethods as part of template creation.
1 parent e4ef641 commit c89a5a0

6 files changed

Lines changed: 123 additions & 57 deletions

File tree

modules/apim-adapter/src/test/java/com/axway/apim/adapter/apis/APIFilterTest.java

Lines changed: 81 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ public void testStandardActualAPI() {
5858
@Test
5959
public void testCustomActualAPI() {
6060
APIFilter filter = new APIFilter.Builder(APIType.ACTUAL_API)
61-
.includeClientApplications(false)
62-
.includeClientOrganizations(false)
63-
.includeQuotas(false)
64-
.build();
61+
.includeClientApplications(false)
62+
.includeClientOrganizations(false)
63+
.includeQuotas(false)
64+
.build();
6565
assertFalse(filter.isIncludeClientApplications());
6666
assertFalse(filter.isIncludeClientOrganizations());
6767
assertFalse(filter.isIncludeQuotas());
@@ -71,8 +71,8 @@ public void testCustomActualAPI() {
7171
@Test
7272
public void filterWithId() {
7373
APIFilter filter = new APIFilter.Builder()
74-
.hasId("9878973123")
75-
.build();
74+
.hasId("9878973123")
75+
.build();
7676
Assert.assertEquals(filter.getFilters().size(), 0);
7777
Assert.assertEquals(filter.getId(), "9878973123");
7878
}
@@ -82,8 +82,8 @@ public void filterWithPath() {
8282
// For this test, we must simulate API-Manager version >7.7
8383
apiManagerAdapter.setApiManagerVersion("7.7.20200130");
8484
APIFilter filter = new APIFilter.Builder()
85-
.hasApiPath("/v1/api")
86-
.build();
85+
.hasApiPath("/v1/api")
86+
.build();
8787
Assert.assertEquals(filter.getFilters().size(), 3);
8888
Assert.assertEquals(filter.getFilters().get(0).getValue(), "path");
8989
Assert.assertEquals(filter.getFilters().get(1).getValue(), "eq");
@@ -94,8 +94,8 @@ public void filterWithPath() {
9494
@Test
9595
public void filterWithName() {
9696
APIFilter filter = new APIFilter.Builder()
97-
.hasName("The name I want")
98-
.build();
97+
.hasName("The name I want")
98+
.build();
9999
Assert.assertEquals(filter.getFilters().size(), 3);
100100
Assert.assertEquals(filter.getFilters().get(0).getValue(), "name");
101101
Assert.assertEquals(filter.getFilters().get(1).getValue(), "eq");
@@ -105,16 +105,16 @@ public void filterWithName() {
105105
@Test
106106
public void hasFullWildCardName() {
107107
APIFilter filter = new APIFilter.Builder()
108-
.hasName("*")
109-
.build();
108+
.hasName("*")
109+
.build();
110110
Assert.assertEquals(filter.getFilters().size(), 0);
111111
}
112112

113113
@Test
114114
public void filterWithBackendApiID() {
115115
APIFilter filter = new APIFilter.Builder()
116-
.hasApiId("7868768768")
117-
.build();
116+
.hasApiId("7868768768")
117+
.build();
118118
Assert.assertEquals(filter.getFilters().size(), 3);
119119
Assert.assertEquals(filter.getFilters().get(0).getValue(), "apiid");
120120
Assert.assertEquals(filter.getFilters().get(1).getValue(), "eq");
@@ -124,8 +124,8 @@ public void filterWithBackendApiID() {
124124
@Test
125125
public void filterWithDeprecated() {
126126
APIFilter filter = new APIFilter.Builder()
127-
.isDeprecated(true)
128-
.build();
127+
.isDeprecated(true)
128+
.build();
129129
Assert.assertEquals(filter.getFilters().size(), 3);
130130
Assert.assertEquals(filter.getFilters().get(0).getValue(), "deprecated");
131131
Assert.assertEquals(filter.getFilters().get(1).getValue(), "eq");
@@ -135,8 +135,8 @@ public void filterWithDeprecated() {
135135
@Test
136136
public void filterWithRetired() {
137137
APIFilter filter = new APIFilter.Builder()
138-
.isRetired(true)
139-
.build();
138+
.isRetired(true)
139+
.build();
140140
Assert.assertEquals(filter.getFilters().size(), 3);
141141
Assert.assertEquals(filter.getFilters().get(0).getValue(), "retired");
142142
Assert.assertEquals(filter.getFilters().get(1).getValue(), "eq");
@@ -146,8 +146,8 @@ public void filterWithRetired() {
146146
@Test
147147
public void filterWithState() {
148148
APIFilter filter = new APIFilter.Builder()
149-
.hasState("unpublished")
150-
.build();
149+
.hasState("unpublished")
150+
.build();
151151
Assert.assertEquals(filter.getFilters().size(), 3);
152152
Assert.assertEquals(filter.getFilters().get(0).getValue(), "state");
153153
Assert.assertEquals(filter.getFilters().get(1).getValue(), "eq");
@@ -157,9 +157,9 @@ public void filterWithState() {
157157
@Test
158158
public void filterWithCreatedOn() {
159159
APIFilter filter = new APIFilter.Builder()
160-
.isCreatedOnAfter("1623915264000") // 17.06.2021
161-
.isCreatedOnBefore("1624865664000") // 28.06.2021
162-
.build();
160+
.isCreatedOnAfter("1623915264000") // 17.06.2021
161+
.isCreatedOnBefore("1624865664000") // 28.06.2021
162+
.build();
163163
Assert.assertEquals(filter.getFilters().size(), 6);
164164
Assert.assertEquals(filter.getFilters().get(0).getValue(), "createdOn");
165165
Assert.assertEquals(filter.getFilters().get(1).getValue(), "gt");
@@ -172,29 +172,56 @@ public void filterWithCreatedOn() {
172172
@Test
173173
public void apiFilterEqualTest() {
174174
APIFilter filter1 = new APIFilter.Builder()
175-
.hasId("12345")
176-
.build();
175+
.hasId("12345")
176+
.build();
177177

178178
APIFilter filter2 = new APIFilter.Builder()
179-
.hasId("12345")
180-
.build();
179+
.hasId("12345")
180+
.build();
181181

182182
Assert.assertEquals(filter1, filter2, "Both filters should be equal");
183183
}
184184

185+
@Test
186+
public void apiFilterNotEqualForDifferentPathTest() {
187+
APIFilter filter1 = new APIFilter.Builder()
188+
.hasApiPath("/api/one")
189+
.build();
190+
191+
APIFilter filter2 = new APIFilter.Builder()
192+
.hasApiPath("/api/two")
193+
.build();
194+
195+
Assert.assertNotEquals(filter1, filter2, "Filters with different apiPath must not be equal");
196+
Assert.assertNotEquals(filter1.hashCode(), filter2.hashCode(), "Filters with different apiPath should have different hashcode");
197+
}
198+
199+
@Test
200+
public void testApiPathFilterMatchAndMismatch() {
201+
APIFilter filter = new APIFilter.Builder().hasApiPath("/test/path/*").build();
202+
203+
API matchingApi = new API();
204+
matchingApi.setPath("/test/path/v1");
205+
assertFalse(filter.filter(matchingApi), "API path /test/path/v1 should match /test/path/*");
206+
207+
API nonMatchingApi = new API();
208+
nonMatchingApi.setPath("/other/path/v1");
209+
assertTrue(filter.filter(nonMatchingApi), "API path /other/path/v1 should not match /test/path/*");
210+
}
211+
185212
@Test
186213
public void testBackendBasepathFilter() {
187214
APIFilter filter = new APIFilter.Builder()
188-
.hasBackendBasepath("*emr-system*")
189-
.build();
215+
.hasBackendBasepath("*emr-system*")
216+
.build();
190217
API testAPI = getAPIWithBackendBasepath("http://emr-system:8081");
191218
assertFalse(filter.filter(testAPI), "API with base-path: http://emr-system:8081 should match to filter: *emr-system*");
192219
testAPI = getAPIWithBackendBasepath("http://sec.hipaa:8086");
193220
assertTrue(filter.filter(testAPI), "API with base-path: http://sec.hipaa:8086 should NOT match to filter: *emr-system*");
194221

195222
filter = new APIFilter.Builder()
196-
.hasBackendBasepath("http://emr-system:8081")
197-
.build();
223+
.hasBackendBasepath("http://emr-system:8081")
224+
.build();
198225

199226
testAPI = getAPIWithBackendBasepath("http://emr-system:8081");
200227
assertFalse(filter.filter(testAPI), "API with base-path: http://emr-system:8081 should match to filter: http://emr-system:8081");
@@ -223,46 +250,46 @@ public void filterAPIsWithOrganization() {
223250
@Test
224251
public void testPolicyFilter() throws AppException {
225252
APIFilter filter = new APIFilter.Builder()
226-
.hasPolicyName("*Policy*")
227-
.build();
253+
.hasPolicyName("*Policy*")
254+
.build();
228255
API testAPI = new API();
229256
addPolicy(testAPI, "Request Policy 1", PolicyType.REQUEST);
230257
addPolicy(testAPI, "Routing Policy 1", PolicyType.ROUTING);
231258
assertFalse(filter.filter(testAPI), "API must match to pattern '*Policy*'");
232259

233260
filter = new APIFilter.Builder()
234-
.hasPolicyName("*Response*")
235-
.build();
261+
.hasPolicyName("*Response*")
262+
.build();
236263
testAPI = new API();
237264
addPolicy(testAPI, "Request Policy 1", PolicyType.REQUEST);
238265
addPolicy(testAPI, "Response Policy 1", PolicyType.RESPONSE);
239266
assertFalse(filter.filter(testAPI), "API must match to pattern '*Response*'");
240267

241268
filter = new APIFilter.Builder()
242-
.hasPolicyName("*Routing*")
243-
.build();
269+
.hasPolicyName("*Routing*")
270+
.build();
244271
testAPI = new API();
245272
addPolicy(testAPI, "Request Policy 1", PolicyType.REQUEST);
246273
addPolicy(testAPI, "Response Policy 1", PolicyType.RESPONSE);
247274
assertTrue(filter.filter(testAPI), "API must NOT match to pattern '*Response*'");
248275

249276
filter = new APIFilter.Builder()
250-
.hasPolicyName("Response Policy 1")
251-
.build();
277+
.hasPolicyName("Response Policy 1")
278+
.build();
252279
testAPI = new API();
253280
addPolicy(testAPI, "Response Policy 1", PolicyType.RESPONSE);
254281
assertFalse(filter.filter(testAPI), "API must match to pattern 'Response Policy 1'");
255282

256283
filter = new APIFilter.Builder()
257-
.hasPolicyName("Response Policy 2")
258-
.build();
284+
.hasPolicyName("Response Policy 2")
285+
.build();
259286
testAPI = new API();
260287
addPolicy(testAPI, "Response Policy 1", PolicyType.RESPONSE);
261288
assertTrue(filter.filter(testAPI), "API must NOT match to pattern 'Response Policy 2' as it is using 'Response Policy 1'");
262289

263290
filter = new APIFilter.Builder()
264-
.hasPolicyName("Not used policy")
265-
.build();
291+
.hasPolicyName("Not used policy")
292+
.build();
266293
testAPI = new API();
267294
addPolicy(testAPI, "Response Policy 1", PolicyType.RESPONSE);
268295
assertTrue(filter.filter(testAPI), "API must NOT match to pattern 'Not used policy' as it is using 'Response Policy 1'");
@@ -271,24 +298,24 @@ public void testPolicyFilter() throws AppException {
271298
@Test
272299
public void testPolicyFilterWithSpecialCaracter() throws AppException {
273300
APIFilter filter = new APIFilter.Builder()
274-
.hasPolicyName("*(Policy)*")
275-
.build();
301+
.hasPolicyName("*(Policy)*")
302+
.build();
276303
API testAPI = new API();
277304
addPolicy(testAPI, "Request (Policy) 1", PolicyType.REQUEST);
278305
assertFalse(filter.filter(testAPI), "API must match to pattern '*(Policy)*'");
279306

280307
filter = new APIFilter.Builder() {
281308
}
282-
.hasPolicyName("()*{}()[].+?^$|")
283-
.build();
309+
.hasPolicyName("()*{}()[].+?^$|")
310+
.build();
284311
testAPI = new API();
285312
addPolicy(testAPI, "(){}()[].+?^$|", PolicyType.REQUEST);
286313
assertFalse(filter.filter(testAPI), "API must match to pattern '*(Policy)*'");
287314

288315
filter = new APIFilter.Builder() {
289316
}
290-
.hasPolicyName("*(policy)*")
291-
.build();
317+
.hasPolicyName("*(policy)*")
318+
.build();
292319
testAPI = new API();
293320
addPolicy(testAPI, "Request policy", PolicyType.REQUEST);
294321
assertTrue(filter.filter(testAPI), "API must not match to pattern '*(Policy)*'");
@@ -331,8 +358,8 @@ public void testInboundSecurityPolicyFilter() {
331358
addInboundSecurityPolicy(testAPI, "Inbound Security Policy 1");
332359

333360
APIFilter filter = new APIFilter.Builder()
334-
.hasPolicyName("Inbound Security*")
335-
.build();
361+
.hasPolicyName("Inbound Security*")
362+
.build();
336363
assertFalse(filter.filter(testAPI), "API must match to pattern 'Inbound Security*'");
337364
}
338365

@@ -403,7 +430,7 @@ private API getAPIWithBackendBasepath(String basePath) {
403430
return api;
404431
}
405432

406-
private void addPolicy(API api, String policyName, PolicyType type) throws AppException {
433+
private void addPolicy(API api, String policyName, PolicyType type) {
407434
OutboundProfile outboundProfile = new OutboundProfile();
408435
Policy policy = new Policy(policyName);
409436
switch (type) {
@@ -432,7 +459,7 @@ private void addInboundSecurityPolicy(API api, String policyName) {
432459
properties.put("authenticationPolicy", "<key type='CircuitContainer'><id field='name' value='API Keys'/><key type='FilterCircuit'><id field='name' value='" + policyName + "'/></key></key>");
433460
SecurityDevice securityDevice = new SecurityDevice();
434461
securityDevice.setType(DeviceType.authPolicy);
435-
// securityDevice.setConvertPolicies(false);
462+
// securityDevice.setConvertPolicies(false);
436463
securityDevice.setProperties(properties);
437464
List<SecurityDevice> devices = new ArrayList<>();
438465
devices.add(securityDevice);
@@ -469,7 +496,7 @@ private void addInboundSecurityToAPI(API api, DeviceType deviceType) {
469496
api.setInboundProfiles(inboundProfiles);
470497
}
471498

472-
private void addOutboundSecurityToAPI(API api, AuthType authType) throws AppException {
499+
private void addOutboundSecurityToAPI(API api, AuthType authType) {
473500
List<AuthenticationProfile> authnProfiles = new ArrayList<>();
474501
AuthenticationProfile authNProfile = new AuthenticationProfile();
475502
authNProfile.setName("_default");

modules/apis/src/main/java/com/axway/apim/api/export/impl/CSVAPIExporter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,8 @@ private String getFormattedDate(Long longDate) {
254254

255255
@Override
256256
public APIFilter getFilter() {
257-
return createFilter();
257+
APIFilter apiFilter = createFilter();
258+
apiFilter.setState(params.getState());
259+
return apiFilter;
258260
}
259261
}

modules/apis/src/main/java/com/axway/apim/api/export/impl/ConsoleAPIExporter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,8 @@ private String getSubscribedApplications(API api) {
195195

196196
@Override
197197
public APIFilter getFilter() {
198-
return createFilter();
198+
APIFilter apiFilter = createFilter();
199+
apiFilter.setState(params.getState());
200+
return apiFilter;
199201
}
200202
}

modules/apis/src/main/java/com/axway/apim/apiimport/actions/UpdateExistingAPI.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.axway.apim.apiimport.APIChangeState;
1010
import com.axway.apim.lib.APIPropertiesExport;
1111
import com.axway.apim.lib.CoreParameters;
12+
import com.axway.apim.lib.EnvironmentProperties;
1213
import com.axway.apim.lib.error.AppException;
1314
import com.axway.apim.lib.error.ErrorCode;
1415
import com.axway.apim.lib.utils.Constants;
@@ -81,6 +82,9 @@ public void execute(APIChangeState changes) throws AppException {
8182
if (statusUpdate.isUpdateVHostRequired() && desiredAPI.getVhost() != null) {
8283
apiAdapter.updateAPIProxy(actualAPI);
8384
}
85+
if (EnvironmentProperties.CHECK_CATALOG) {
86+
apiAdapter.pollCatalogForPublishedState(actualAPI.getId(), actualAPI.getName(), actualAPI.getState());
87+
}
8488
new APIQuotaManager(desiredAPI, actualAPI).execute(actualAPI);
8589
new ManageClientOrganization(desiredAPI, actualAPI).execute(false);
8690
// Handle subscription to applications

modules/apps/src/test/java/com/axway/apim/appimport/adapter/JSONClientAppAdapterTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,4 +231,31 @@ public void testAppWithQuotaBasedOnAPIPath() throws AppException {
231231
assertEquals(restr1.getConfig().get("period"), "week");
232232
assertEquals(restr1.getConfig().get("per"), "1");
233233
}
234+
235+
@Test
236+
public void testAppWithQuotaBasedOnMultipleAPIPaths() throws AppException {
237+
String testFile = JSONClientAppAdapterTest.class.getResource(testPackage + "/AppWithQuotaPerMultipleAPIPaths.json").getPath();
238+
assertTrue(new File(testFile).exists(), "Test file doesn't exists");
239+
240+
AppImportParams importParams = new AppImportParams();
241+
importParams.setConfig(testFile);
242+
importParams.setHostname("localhost");
243+
importParams.setUsername("apiadmin");
244+
importParams.setPassword(Utils.getEncryptedPassword());
245+
ClientAppAdapter adapter = new ClientAppConfigAdapter(importParams);
246+
247+
List<ClientApplication> apps = adapter.getApplications();
248+
assertEquals(apps.size(), 1, "Expected 1 app returned from the Adapter");
249+
APIQuota appQuota = apps.get(0).getAppQuota();
250+
assertNotNull(appQuota, "appQuota is null");
251+
assertNotNull(appQuota.getRestrictions(), "appQuota restrictions are null");
252+
assertEquals(appQuota.getRestrictions().size(), 2, "Expected two restrictions");
253+
254+
QuotaRestriction firstRestriction = appQuota.getRestrictions().get(0);
255+
QuotaRestriction secondRestriction = appQuota.getRestrictions().get(1);
256+
257+
assertEquals(firstRestriction.getApiId(), "e4ded8c8-0a40-4b50-bc13-552fb7209150");
258+
assertEquals(secondRestriction.getApiId(), "11111111-2222-3333-4444-555555555555");
259+
assertNotEquals(firstRestriction.getApiId(), secondRestriction.getApiId(), "Each apiPath must resolve to its own API");
260+
}
234261
}

modules/spectoconfig/src/main/java/com/axway/apim/config/APIConfig.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
@JsonPropertyOrder({"name", "path", "state", "version", "organization", "apiSpecification", "summary", "descriptionType", "descriptionManual", "vhost", "remoteHost",
1414
"backendBasepath", "image", "inboundProfiles", "outboundProfiles", "securityProfiles", "authenticationProfiles", "tags", "customProperties",
15-
"corsProfiles", "caCerts"})
15+
"corsProfiles", "caCerts", "apiMethods"})
1616
public class APIConfig {
1717

1818
public static final String DEFAULT = "_default";
@@ -73,6 +73,10 @@ public Map<String, InboundProfile> getInboundProfiles() {
7373
return api.getInboundProfiles();
7474
}
7575

76+
public List<APIMethod> getApiMethods() {
77+
return api.getApiMethods();
78+
}
79+
7680
public List<CorsProfile> getCorsProfiles() {
7781

7882
return api.getCorsProfiles();

0 commit comments

Comments
 (0)