Complete unit test for models-pdp
[policy/models.git] / models-pdp / src / test / java / org / onap / policy / models / pdp / persistence / provider / PdpProviderTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019 Nordix Foundation.
4  *  Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
5  * ================================================================================
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.models.pdp.persistence.provider;
23
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertNotEquals;
27 import static org.junit.Assert.assertTrue;
28
29 import java.sql.Connection;
30 import java.sql.DriverManager;
31 import java.util.ArrayList;
32 import java.util.List;
33
34 import org.junit.After;
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.onap.policy.common.utils.coder.StandardCoder;
38 import org.onap.policy.common.utils.resources.ResourceUtils;
39 import org.onap.policy.models.base.PfModelException;
40 import org.onap.policy.models.dao.DaoParameters;
41 import org.onap.policy.models.dao.PfDao;
42 import org.onap.policy.models.dao.PfDaoFactory;
43 import org.onap.policy.models.dao.impl.DefaultPfDao;
44 import org.onap.policy.models.pdp.concepts.Pdp;
45 import org.onap.policy.models.pdp.concepts.PdpGroup;
46 import org.onap.policy.models.pdp.concepts.PdpGroupFilter;
47 import org.onap.policy.models.pdp.concepts.PdpGroups;
48 import org.onap.policy.models.pdp.concepts.PdpStatistics;
49 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
50 import org.onap.policy.models.pdp.enums.PdpHealthStatus;
51 import org.onap.policy.models.pdp.enums.PdpState;
52 import org.onap.policy.models.pdp.persistence.provider.PdpProvider;
53 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
54 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
55 import org.onap.policy.models.tosca.simple.provider.SimpleToscaProvider;
56
57 /**
58  * Test the {@link SimpleToscaProvider} class.
59  *
60  * @author Liam Fallon (liam.fallon@est.tech)
61  */
62 public class PdpProviderTest {
63     private Connection connection;
64     private PfDao pfDao;
65     private StandardCoder standardCoder;
66
67
68     /**
69      * Set up the DAO towards the database.
70      *
71      * @throws Exception on database errors
72      */
73     @Before
74     public void setupDao() throws Exception {
75         // Use the JDBC UI "jdbc:h2:mem:testdb" to test towards the h2 database
76         // Use the JDBC UI "jdbc:mariadb://localhost:3306/policy" to test towards a locally installed mariadb instance
77         connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "policy", "P01icY");
78
79         final DaoParameters daoParameters = new DaoParameters();
80         daoParameters.setPluginClass(DefaultPfDao.class.getCanonicalName());
81
82         // Use the persistence unit ToscaConceptTest to test towards the h2 database
83         // Use the persistence unit ToscaConceptMariaDBTest to test towards a locally installed mariadb instance
84         daoParameters.setPersistenceUnit("ToscaConceptTest");
85
86         pfDao = new PfDaoFactory().createPfDao(daoParameters);
87         pfDao.init(daoParameters);
88     }
89
90     /**
91      * Set up GSON.
92      */
93     @Before
94     public void setupGson() {
95         standardCoder = new StandardCoder();
96     }
97
98     @After
99     public void teardown() throws Exception {
100         pfDao.close();
101         connection.close();
102     }
103
104     @Test
105     public void testGroupsGet() throws Exception {
106         assertThatThrownBy(() -> {
107             new PdpProvider().getPdpGroups(null, null, null);
108         }).hasMessage("dao is marked @NonNull but is null");
109
110         assertThatThrownBy(() -> {
111             new PdpProvider().getPdpGroups(null, null, "version");
112         }).hasMessage("dao is marked @NonNull but is null");
113
114         assertThatThrownBy(() -> {
115             new PdpProvider().getPdpGroups(null, "name", "version");
116         }).hasMessage("dao is marked @NonNull but is null");
117
118         String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroups0.json");
119         PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
120
121         PdpGroups createdPdpGroups0 = new PdpGroups();
122         createdPdpGroups0.setGroups(new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()));
123         String createdJson = standardCoder.encode(createdPdpGroups0);
124         assertEquals(originalJson.replaceAll("\\s+", ""), createdJson.replaceAll("\\s+", ""));
125
126         PdpGroups gotPdpGroups0 = new PdpGroups();
127         gotPdpGroups0.setGroups(new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3"));
128
129         String gotJson = standardCoder.encode(gotPdpGroups0);
130
131         assertEquals(originalJson.replaceAll("\\s+", ""), gotJson.replaceAll("\\s+", ""));
132     }
133
134     @Test
135     public void testFilteredPdpGroupGet() throws Exception {
136         assertThatThrownBy(() -> {
137             new PdpProvider().getFilteredPdpGroups(null, null);
138         }).hasMessage("dao is marked @NonNull but is null");
139
140         assertThatThrownBy(() -> {
141             new PdpProvider().getFilteredPdpGroups(null, PdpGroupFilter.builder().build());
142         }).hasMessage("dao is marked @NonNull but is null");
143
144         assertThatThrownBy(() -> {
145             new PdpProvider().getFilteredPdpGroups(pfDao, null);
146         }).hasMessage("filter is marked @NonNull but is null");
147
148         String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroupsForFiltering.json");
149         PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
150
151         assertEquals(5, new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()).size());
152
153         List<ToscaPolicyTypeIdentifier> policyTypeList = new ArrayList<>();
154         policyTypeList.add(new ToscaPolicyTypeIdentifier("policy.type.0", "1.2.3"));
155
156         List<ToscaPolicyIdentifier> policyList = new ArrayList<>();
157         policyList.add(new ToscaPolicyIdentifier("Policy0", "4.5.6"));
158
159         // @formatter:off
160         final PdpGroupFilter filter = PdpGroupFilter.builder()
161                 .groupState(PdpState.PASSIVE)
162                 .name("PdpGroup0")
163                 .version("1.2.3")
164                 .matchPoliciesExactly(false)
165                 .matchPolicyTypesExactly(false)
166                 .pdpState(PdpState.PASSIVE)
167                 .pdpType("APEX")
168                 .policyTypeList(policyTypeList)
169                 .policyList(policyList)
170                 .build();
171         // @formatter:on
172         assertEquals(1, new PdpProvider().getFilteredPdpGroups(pfDao, filter).size());
173     }
174
175     @Test
176     public void testGroupsCreate() throws Exception {
177         assertThatThrownBy(() -> {
178             new PdpProvider().createPdpGroups(null, null);
179         }).hasMessage("dao is marked @NonNull but is null");
180
181         assertThatThrownBy(() -> {
182             new PdpProvider().createPdpGroups(null, new ArrayList<>());
183         }).hasMessage("dao is marked @NonNull but is null");
184
185         assertThatThrownBy(() -> {
186             new PdpProvider().createPdpGroups(pfDao, null);
187         }).hasMessage("pdpGroups is marked @NonNull but is null");
188
189         String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroups0.json");
190         PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
191
192         PdpGroups createdPdpGroups0 = new PdpGroups();
193         createdPdpGroups0.setGroups(new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()));
194         String createdJson = standardCoder.encode(createdPdpGroups0);
195         assertEquals(originalJson.replaceAll("\\s+", ""), createdJson.replaceAll("\\s+", ""));
196
197         PdpGroups gotPdpGroups0 = new PdpGroups();
198         gotPdpGroups0.setGroups(new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3"));
199
200         String gotJson = standardCoder.encode(gotPdpGroups0);
201         assertEquals(originalJson.replaceAll("\\s+", ""), gotJson.replaceAll("\\s+", ""));
202
203         pdpGroups0.getGroups().get(0).setPdpGroupState(null);
204         assertThatThrownBy(() -> {
205             new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups());
206         }).hasMessageContaining("INVALID:pdpGroupState may not be null");
207     }
208
209     @Test
210     public void testGroupsCreateNoPdp() throws Exception {
211         String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroupsNoPDPs.json");
212
213         PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
214
215         PdpGroups createdPdpGroups0 = new PdpGroups();
216         createdPdpGroups0.setGroups(new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()));
217         assertNotEquals(pdpGroups0, createdPdpGroups0);
218         pdpGroups0.getGroups().get(0).getPdpSubgroups().get(0).setPdpInstances(new ArrayList<>());
219         String originalTweakedJson = standardCoder.encode(pdpGroups0);
220         String createdJson = standardCoder.encode(createdPdpGroups0);
221         assertEquals(originalTweakedJson.replaceAll("\\s+", ""), createdJson.replaceAll("\\s+", ""));
222
223         PdpGroups gotPdpGroups0 = new PdpGroups();
224         gotPdpGroups0.setGroups(new PdpProvider().getPdpGroups(pfDao, "TestPdpGroup", "1.2.3"));
225
226         String gotJson = standardCoder.encode(gotPdpGroups0);
227         assertEquals(originalTweakedJson.replaceAll("\\s+", ""), gotJson.replaceAll("\\s+", ""));
228     }
229
230     @Test
231     public void testGroupsUpdate() throws Exception {
232         assertThatThrownBy(() -> {
233             new PdpProvider().updatePdpGroups(null, null);
234         }).hasMessage("dao is marked @NonNull but is null");
235
236         assertThatThrownBy(() -> {
237             new PdpProvider().updatePdpGroups(null, new ArrayList<>());
238         }).hasMessage("dao is marked @NonNull but is null");
239
240         assertThatThrownBy(() -> {
241             new PdpProvider().updatePdpGroups(pfDao, null);
242         }).hasMessage("pdpGroups is marked @NonNull but is null");
243
244         String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroups0.json");
245         PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
246
247         PdpGroups createdPdpGroups0 = new PdpGroups();
248         createdPdpGroups0.setGroups(new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()));
249         String createdJson = standardCoder.encode(createdPdpGroups0);
250         assertEquals(originalJson.replaceAll("\\s+", ""), createdJson.replaceAll("\\s+", ""));
251
252         PdpGroups gotPdpGroups0 = new PdpGroups();
253         gotPdpGroups0.setGroups(new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3"));
254
255         String gotJson = standardCoder.encode(gotPdpGroups0);
256         assertEquals(originalJson.replaceAll("\\s+", ""), gotJson.replaceAll("\\s+", ""));
257
258         String updateJson = ResourceUtils.getResourceAsString("testdata/PdpGroups0Update.json");
259         PdpGroups updatePdpGroups0 = standardCoder.decode(updateJson, PdpGroups.class);
260
261         PdpGroups updatedPdpGroups0 = new PdpGroups();
262         updatedPdpGroups0.setGroups(new PdpProvider().updatePdpGroups(pfDao, updatePdpGroups0.getGroups()));
263
264         List<Pdp> beforePdpInstances = updatePdpGroups0.getGroups().get(0).getPdpSubgroups().get(0).getPdpInstances();
265         List<Pdp> afterPdpInstances = updatedPdpGroups0.getGroups().get(0).getPdpSubgroups().get(0).getPdpInstances();
266         assertTrue(beforePdpInstances.containsAll(afterPdpInstances));
267
268         pdpGroups0.getGroups().get(0).setPdpGroupState(null);
269         assertThatThrownBy(() -> {
270             new PdpProvider().updatePdpGroups(pfDao, pdpGroups0.getGroups());
271         }).hasMessageContaining("INVALID:pdpGroupState may not be null");
272     }
273
274     @Test
275     public void testPoliciesDelete() throws Exception {
276         assertThatThrownBy(() -> {
277             new PdpProvider().deletePdpGroup(null, null, null);
278         }).hasMessage("dao is marked @NonNull but is null");
279
280         assertThatThrownBy(() -> {
281             new PdpProvider().deletePdpGroup(null, null, "version");
282         }).hasMessage("dao is marked @NonNull but is null");
283
284         assertThatThrownBy(() -> {
285             new PdpProvider().deletePdpGroup(null, "name", null);
286         }).hasMessage("dao is marked @NonNull but is null");
287
288         assertThatThrownBy(() -> {
289             new PdpProvider().deletePdpGroup(null, "name", "version");
290         }).hasMessage("dao is marked @NonNull but is null");
291
292         assertThatThrownBy(() -> {
293             new PdpProvider().deletePdpGroup(pfDao, null, "version");
294         }).hasMessage("name is marked @NonNull but is null");
295
296         assertThatThrownBy(() -> {
297             new PdpProvider().deletePdpGroup(pfDao, "name", null);
298         }).hasMessage("version is marked @NonNull but is null");
299
300         assertThatThrownBy(() -> {
301             new PdpProvider().deletePdpGroup(pfDao, "name", "version");
302         }).hasMessage("delete of PDP group \"name:version\" failed, PDP group does not exist");
303
304         String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroups0.json");
305         PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
306
307         PdpGroups createdPdpGroups0 = new PdpGroups();
308         createdPdpGroups0.setGroups(new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()));
309         String createdJson = standardCoder.encode(createdPdpGroups0);
310         assertEquals(originalJson.replaceAll("\\s+", ""), createdJson.replaceAll("\\s+", ""));
311
312         PdpGroups gotPdpGroups0 = new PdpGroups();
313         gotPdpGroups0.setGroups(new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3"));
314
315         String gotJson = standardCoder.encode(gotPdpGroups0);
316         assertEquals(originalJson.replaceAll("\\s+", ""), gotJson.replaceAll("\\s+", ""));
317
318         PdpGroup deletedPdpGroup = new PdpProvider().deletePdpGroup(pfDao, "PdpGroup0", "1.2.3");
319
320         assertEquals(createdPdpGroups0.getGroups().get(0), deletedPdpGroup);
321
322         assertEquals(0, new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3").size());
323
324         assertThatThrownBy(() -> {
325             new PdpProvider().deletePdpGroup(pfDao, "PdpGroup0", "1.2.3");
326         }).hasMessage("delete of PDP group \"PdpGroup0:1.2.3\" failed, PDP group does not exist");
327     }
328
329     @Test
330     public void testPdpSubgroupUpdate() throws Exception {
331         assertThatThrownBy(() -> {
332             new PdpProvider().updatePdpSubGroup(null, null, null, null);
333         }).hasMessage("dao is marked @NonNull but is null");
334
335         assertThatThrownBy(() -> {
336             new PdpProvider().updatePdpSubGroup(null, null, null, new PdpSubGroup());
337         }).hasMessage("dao is marked @NonNull but is null");
338
339         assertThatThrownBy(() -> {
340             new PdpProvider().updatePdpSubGroup(null, null, "version", null);
341         }).hasMessage("dao is marked @NonNull but is null");
342
343         assertThatThrownBy(() -> {
344             new PdpProvider().updatePdpSubGroup(null, null, "version", new PdpSubGroup());
345         }).hasMessage("dao is marked @NonNull but is null");
346
347         assertThatThrownBy(() -> {
348             new PdpProvider().updatePdpSubGroup(null, "name", null, null);
349         }).hasMessage("dao is marked @NonNull but is null");
350
351         assertThatThrownBy(() -> {
352             new PdpProvider().updatePdpSubGroup(null, "name", null, new PdpSubGroup());
353         }).hasMessage("dao is marked @NonNull but is null");
354
355         assertThatThrownBy(() -> {
356             new PdpProvider().updatePdpSubGroup(null, "name", "version", null);
357         }).hasMessage("dao is marked @NonNull but is null");
358
359         assertThatThrownBy(() -> {
360             new PdpProvider().updatePdpSubGroup(null, "name", "version", new PdpSubGroup());
361         }).hasMessage("dao is marked @NonNull but is null");
362
363         assertThatThrownBy(() -> {
364             new PdpProvider().updatePdpSubGroup(pfDao, null, null, new PdpSubGroup());
365         }).hasMessage("pdpGroupName is marked @NonNull but is null");
366
367         assertThatThrownBy(() -> {
368             new PdpProvider().updatePdpSubGroup(pfDao, null, "version", null);
369         }).hasMessage("pdpGroupName is marked @NonNull but is null");
370
371         assertThatThrownBy(() -> {
372             new PdpProvider().updatePdpSubGroup(pfDao, null, "version", new PdpSubGroup());
373         }).hasMessage("pdpGroupName is marked @NonNull but is null");
374
375         assertThatThrownBy(() -> {
376             new PdpProvider().updatePdpSubGroup(pfDao, "name", null, null);
377         }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
378
379         assertThatThrownBy(() -> {
380             new PdpProvider().updatePdpSubGroup(pfDao, "name", null, new PdpSubGroup());
381         }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
382
383         assertThatThrownBy(() -> {
384             new PdpProvider().updatePdpSubGroup(pfDao, "name", "version", null);
385         }).hasMessage("pdpSubGroup is marked @NonNull but is null");
386
387         assertThatThrownBy(() -> {
388             new PdpProvider().updatePdpSubGroup(pfDao, "name", "version", new PdpSubGroup());
389         }).hasMessage("parameter \"localName\" is null");
390
391         String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroups0.json");
392         PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
393
394         PdpGroups createdPdpGroups0 = new PdpGroups();
395         createdPdpGroups0.setGroups(new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()));
396         String createdJson = standardCoder.encode(createdPdpGroups0);
397         assertEquals(originalJson.replaceAll("\\s+", ""), createdJson.replaceAll("\\s+", ""));
398
399         PdpGroups gotPdpGroups0 = new PdpGroups();
400         gotPdpGroups0.setGroups(new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3"));
401
402         String gotJson = standardCoder.encode(gotPdpGroups0);
403         assertEquals(originalJson.replaceAll("\\s+", ""), gotJson.replaceAll("\\s+", ""));
404
405         PdpSubGroup existingSubGroup = gotPdpGroups0.getGroups().get(0).getPdpSubgroups().get(0);
406         existingSubGroup.setCurrentInstanceCount(10);
407         existingSubGroup.setDesiredInstanceCount(10);
408         new PdpProvider().updatePdpSubGroup(pfDao, "PdpGroup0", "1.2.3", existingSubGroup);
409
410         List<PdpGroup> afterUpdatePdpGroups = new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3");
411         assertEquals(10, afterUpdatePdpGroups.get(0).getPdpSubgroups().get(0).getCurrentInstanceCount());
412         assertEquals(10, afterUpdatePdpGroups.get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
413
414         existingSubGroup.setDesiredInstanceCount(-1);
415         assertThatThrownBy(() -> {
416             new PdpProvider().updatePdpSubGroup(pfDao, "PdpGroup0", "1.2.3", existingSubGroup);
417         }).hasMessageContaining("INVALID:the desired instance count of a PDP sub group may not be negative");
418         existingSubGroup.setDesiredInstanceCount(10);
419
420         existingSubGroup.setPdpType("Loooooooooooooooooooooooooooooooooooooooo"
421                 + "ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongKey");
422         assertThatThrownBy(() -> {
423             new PdpProvider().updatePdpSubGroup(pfDao, "PdpGroup0", "1.2.3", existingSubGroup);
424         }).hasMessageContaining("Value too long for column");
425         existingSubGroup.setPdpType("APEX");
426     }
427
428     @Test
429     public void testPdpUpdate() throws Exception {
430         assertThatThrownBy(() -> {
431             new PdpProvider().updatePdp(null, null, null, null, null);
432         }).hasMessage("dao is marked @NonNull but is null");
433
434         assertThatThrownBy(() -> {
435             new PdpProvider().updatePdp(null, null, null, null, new Pdp());
436         }).hasMessage("dao is marked @NonNull but is null");
437
438         assertThatThrownBy(() -> {
439             new PdpProvider().updatePdp(null, null, null, "TYPE", null);
440         }).hasMessage("dao is marked @NonNull but is null");
441
442         assertThatThrownBy(() -> {
443             new PdpProvider().updatePdp(null, null, null, "TYPE", new Pdp());
444         }).hasMessage("dao is marked @NonNull but is null");
445
446         assertThatThrownBy(() -> {
447             new PdpProvider().updatePdp(null, null, "version", null, null);
448         }).hasMessage("dao is marked @NonNull but is null");
449
450         assertThatThrownBy(() -> {
451             new PdpProvider().updatePdp(null, null, "version", null, new Pdp());
452         }).hasMessage("dao is marked @NonNull but is null");
453
454         assertThatThrownBy(() -> {
455             new PdpProvider().updatePdp(null, null, "version", "TYPE", null);
456         }).hasMessage("dao is marked @NonNull but is null");
457
458         assertThatThrownBy(() -> {
459             new PdpProvider().updatePdp(null, null, "version", "TYPE", new Pdp());
460         }).hasMessage("dao is marked @NonNull but is null");
461
462         assertThatThrownBy(() -> {
463             new PdpProvider().updatePdp(null, "name", null, null, null);
464         }).hasMessage("dao is marked @NonNull but is null");
465
466         assertThatThrownBy(() -> {
467             new PdpProvider().updatePdp(null, "name", null, null, new Pdp());
468         }).hasMessage("dao is marked @NonNull but is null");
469
470         assertThatThrownBy(() -> {
471             new PdpProvider().updatePdp(null, "name", null, "TYPE", null);
472         }).hasMessage("dao is marked @NonNull but is null");
473
474         assertThatThrownBy(() -> {
475             new PdpProvider().updatePdp(null, "name", null, "TYPE", new Pdp());
476         }).hasMessage("dao is marked @NonNull but is null");
477
478         assertThatThrownBy(() -> {
479             new PdpProvider().updatePdp(null, "name", "version", null, null);
480         }).hasMessage("dao is marked @NonNull but is null");
481
482         assertThatThrownBy(() -> {
483             new PdpProvider().updatePdp(null, "name", "version", null, new Pdp());
484         }).hasMessage("dao is marked @NonNull but is null");
485
486         assertThatThrownBy(() -> {
487             new PdpProvider().updatePdp(null, "name", "version", "TYPE", null);
488         }).hasMessage("dao is marked @NonNull but is null");
489
490         assertThatThrownBy(() -> {
491             new PdpProvider().updatePdp(null, "name", "version", "TYPE", new Pdp());
492         }).hasMessage("dao is marked @NonNull but is null");
493
494         assertThatThrownBy(() -> {
495             new PdpProvider().updatePdp(pfDao, null, null, null, null);
496         }).hasMessage("pdpGroupName is marked @NonNull but is null");
497
498         assertThatThrownBy(() -> {
499             new PdpProvider().updatePdp(pfDao, null, null, null, new Pdp());
500         }).hasMessage("pdpGroupName is marked @NonNull but is null");
501
502         assertThatThrownBy(() -> {
503             new PdpProvider().updatePdp(pfDao, null, null, "TYPE", null);
504         }).hasMessage("pdpGroupName is marked @NonNull but is null");
505
506         assertThatThrownBy(() -> {
507             new PdpProvider().updatePdp(pfDao, null, null, "TYPE", new Pdp());
508         }).hasMessage("pdpGroupName is marked @NonNull but is null");
509
510         assertThatThrownBy(() -> {
511             new PdpProvider().updatePdp(pfDao, null, "version", null, null);
512         }).hasMessage("pdpGroupName is marked @NonNull but is null");
513
514         assertThatThrownBy(() -> {
515             new PdpProvider().updatePdp(pfDao, null, "version", null, new Pdp());
516         }).hasMessage("pdpGroupName is marked @NonNull but is null");
517
518         assertThatThrownBy(() -> {
519             new PdpProvider().updatePdp(pfDao, null, "version", "TYPE", null);
520         }).hasMessage("pdpGroupName is marked @NonNull but is null");
521
522         assertThatThrownBy(() -> {
523             new PdpProvider().updatePdp(pfDao, null, "version", "TYPE", new Pdp());
524         }).hasMessage("pdpGroupName is marked @NonNull but is null");
525
526         assertThatThrownBy(() -> {
527             new PdpProvider().updatePdp(pfDao, "name", null, null, null);
528         }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
529
530         assertThatThrownBy(() -> {
531             new PdpProvider().updatePdp(pfDao, "name", null, null, new Pdp());
532         }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
533
534         assertThatThrownBy(() -> {
535             new PdpProvider().updatePdp(pfDao, "name", null, "TYPE", null);
536         }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
537
538         assertThatThrownBy(() -> {
539             new PdpProvider().updatePdp(pfDao, "name", null, "TYPE", new Pdp());
540         }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
541
542         assertThatThrownBy(() -> {
543             new PdpProvider().updatePdp(pfDao, "name", "version", null, null);
544         }).hasMessage("pdpSubGroup is marked @NonNull but is null");
545
546         assertThatThrownBy(() -> {
547             new PdpProvider().updatePdp(pfDao, "name", "version", null, new Pdp());
548         }).hasMessage("pdpSubGroup is marked @NonNull but is null");
549
550         assertThatThrownBy(() -> {
551             new PdpProvider().updatePdp(pfDao, "name", "version", "TYPE", null);
552         }).hasMessage("pdp is marked @NonNull but is null");
553
554         assertThatThrownBy(() -> {
555             new PdpProvider().updatePdp(pfDao, "name", "version", "TYPE", new Pdp());
556         }).hasMessage("parameter \"localName\" is null");
557
558         String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroups0.json");
559         PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
560
561         PdpGroups createdPdpGroups0 = new PdpGroups();
562         createdPdpGroups0.setGroups(new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()));
563         String createdJson = standardCoder.encode(createdPdpGroups0);
564         assertEquals(originalJson.replaceAll("\\s+", ""), createdJson.replaceAll("\\s+", ""));
565
566         PdpGroups gotPdpGroups0 = new PdpGroups();
567         gotPdpGroups0.setGroups(new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3"));
568
569         String gotJson = standardCoder.encode(gotPdpGroups0);
570         assertEquals(originalJson.replaceAll("\\s+", ""), gotJson.replaceAll("\\s+", ""));
571
572         Pdp existingPdp = gotPdpGroups0.getGroups().get(0).getPdpSubgroups().get(0).getPdpInstances().get(0);
573         existingPdp.setPdpState(PdpState.TEST);
574         existingPdp.setHealthy(PdpHealthStatus.TEST_IN_PROGRESS);
575         new PdpProvider().updatePdp(pfDao, "PdpGroup0", "1.2.3", "APEX", existingPdp);
576
577         List<PdpGroup> afterUpdatePdpGroups = new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3");
578         assertEquals(PdpState.TEST,
579                 afterUpdatePdpGroups.get(0).getPdpSubgroups().get(0).getPdpInstances().get(0).getPdpState());
580         assertEquals(PdpHealthStatus.TEST_IN_PROGRESS,
581                 afterUpdatePdpGroups.get(0).getPdpSubgroups().get(0).getPdpInstances().get(0).getHealthy());
582
583         existingPdp.setMessage("");
584         assertThatThrownBy(() -> {
585             new PdpProvider().updatePdp(pfDao, "PdpGroup0", "1.2.3", "APEX", existingPdp);
586         }).hasMessageContaining("INVALID:message may not be blank");
587         existingPdp.setMessage("A Message");
588     }
589
590     @Test
591     public void testGetPdpStatistics() throws PfModelException {
592         assertThatThrownBy(() -> {
593             new PdpProvider().getPdpStatistics(null, null, null);
594         }).hasMessage("dao is marked @NonNull but is null");
595
596         assertThatThrownBy(() -> {
597             new PdpProvider().getPdpStatistics(null, null, "version");
598         }).hasMessage("dao is marked @NonNull but is null");
599
600         assertThatThrownBy(() -> {
601             new PdpProvider().getPdpStatistics(null, "name", null);
602         }).hasMessage("dao is marked @NonNull but is null");
603
604         assertEquals(0, new PdpProvider().getPdpStatistics(pfDao, "name", "version").size());
605     }
606
607     @Test
608     public void testUpdatePdpStatistics() throws PfModelException {
609         assertThatThrownBy(() -> {
610             new PdpProvider().updatePdpStatistics(null, null, null, null, null, null);
611         }).hasMessage("dao is marked @NonNull but is null");
612
613         assertThatThrownBy(() -> {
614             new PdpProvider().updatePdpStatistics(null, null, null, null, null, new PdpStatistics());
615         }).hasMessage("dao is marked @NonNull but is null");
616
617         assertThatThrownBy(() -> {
618             new PdpProvider().updatePdpStatistics(null, null, null, null, "inst", null);
619         }).hasMessage("dao is marked @NonNull but is null");
620
621         assertThatThrownBy(() -> {
622             new PdpProvider().updatePdpStatistics(null, null, null, null, "inst", new PdpStatistics());
623         }).hasMessage("dao is marked @NonNull but is null");
624
625         assertThatThrownBy(() -> {
626             new PdpProvider().updatePdpStatistics(null, null, null, "TYPE", null, null);
627         }).hasMessage("dao is marked @NonNull but is null");
628
629         assertThatThrownBy(() -> {
630             new PdpProvider().updatePdpStatistics(null, null, null, "TYPE", null, new PdpStatistics());
631         }).hasMessage("dao is marked @NonNull but is null");
632
633         assertThatThrownBy(() -> {
634             new PdpProvider().updatePdpStatistics(null, null, null, "TYPE", "inst", null);
635         }).hasMessage("dao is marked @NonNull but is null");
636
637         assertThatThrownBy(() -> {
638             new PdpProvider().updatePdpStatistics(null, null, null, "TYPE", "inst", new PdpStatistics());
639         }).hasMessage("dao is marked @NonNull but is null");
640
641         assertThatThrownBy(() -> {
642             new PdpProvider().updatePdpStatistics(null, null, "version", null, null, null);
643         }).hasMessage("dao is marked @NonNull but is null");
644
645         assertThatThrownBy(() -> {
646             new PdpProvider().updatePdpStatistics(null, null, "version", null, null, new PdpStatistics());
647         }).hasMessage("dao is marked @NonNull but is null");
648
649         assertThatThrownBy(() -> {
650             new PdpProvider().updatePdpStatistics(null, null, "version", null, "inst", null);
651         }).hasMessage("dao is marked @NonNull but is null");
652
653         assertThatThrownBy(() -> {
654             new PdpProvider().updatePdpStatistics(null, null, "version",  null, "inst", new PdpStatistics());
655         }).hasMessage("dao is marked @NonNull but is null");
656
657         assertThatThrownBy(() -> {
658             new PdpProvider().updatePdpStatistics(null, null, "version", "TYPE", null, null);
659         }).hasMessage("dao is marked @NonNull but is null");
660
661         assertThatThrownBy(() -> {
662             new PdpProvider().updatePdpStatistics(null, null, "version", "TYPE", null, new PdpStatistics());
663         }).hasMessage("dao is marked @NonNull but is null");
664
665         assertThatThrownBy(() -> {
666             new PdpProvider().updatePdpStatistics(null, null, "version", "TYPE", "inst", null);
667         }).hasMessage("dao is marked @NonNull but is null");
668
669         assertThatThrownBy(() -> {
670             new PdpProvider().updatePdpStatistics(null, null, "version", "TYPE", "inst", new PdpStatistics());
671         }).hasMessage("dao is marked @NonNull but is null");
672
673         assertThatThrownBy(() -> {
674             new PdpProvider().updatePdpStatistics(null, "name", null, null, null, null);
675         }).hasMessage("dao is marked @NonNull but is null");
676
677         assertThatThrownBy(() -> {
678             new PdpProvider().updatePdpStatistics(null, "name", null, null, null, new PdpStatistics());
679         }).hasMessage("dao is marked @NonNull but is null");
680
681         assertThatThrownBy(() -> {
682             new PdpProvider().updatePdpStatistics(null, "name", null, null, "inst", null);
683         }).hasMessage("dao is marked @NonNull but is null");
684
685         assertThatThrownBy(() -> {
686             new PdpProvider().updatePdpStatistics(null, "name", null, null, "inst", new PdpStatistics());
687         }).hasMessage("dao is marked @NonNull but is null");
688
689         assertThatThrownBy(() -> {
690             new PdpProvider().updatePdpStatistics(null, "name", null, "TYPE", null, null);
691         }).hasMessage("dao is marked @NonNull but is null");
692
693         assertThatThrownBy(() -> {
694             new PdpProvider().updatePdpStatistics(null, "name", null, "TYPE", null, new PdpStatistics());
695         }).hasMessage("dao is marked @NonNull but is null");
696
697         assertThatThrownBy(() -> {
698             new PdpProvider().updatePdpStatistics(null, "name", null, "TYPE", "inst", null);
699         }).hasMessage("dao is marked @NonNull but is null");
700
701         assertThatThrownBy(() -> {
702             new PdpProvider().updatePdpStatistics(null, "name", null, "TYPE", "inst", new PdpStatistics());
703         }).hasMessage("dao is marked @NonNull but is null");
704
705         assertThatThrownBy(() -> {
706             new PdpProvider().updatePdpStatistics(null, "name", "version", null, null, null);
707         }).hasMessage("dao is marked @NonNull but is null");
708
709         assertThatThrownBy(() -> {
710             new PdpProvider().updatePdpStatistics(null, "name", "version", null, null, new PdpStatistics());
711         }).hasMessage("dao is marked @NonNull but is null");
712
713         assertThatThrownBy(() -> {
714             new PdpProvider().updatePdpStatistics(null, "name", "version", null, "inst", null);
715         }).hasMessage("dao is marked @NonNull but is null");
716
717         assertThatThrownBy(() -> {
718             new PdpProvider().updatePdpStatistics(null, "name", "version", null, "inst", new PdpStatistics());
719         }).hasMessage("dao is marked @NonNull but is null");
720
721         assertThatThrownBy(() -> {
722             new PdpProvider().updatePdpStatistics(null, "name", "version", "TYPE", null, null);
723         }).hasMessage("dao is marked @NonNull but is null");
724
725         assertThatThrownBy(() -> {
726             new PdpProvider().updatePdpStatistics(null, "name", "version", "TYPE", null, new PdpStatistics());
727         }).hasMessage("dao is marked @NonNull but is null");
728
729         assertThatThrownBy(() -> {
730             new PdpProvider().updatePdpStatistics(null, "name", "version", "TYPE", "inst", null);
731         }).hasMessage("dao is marked @NonNull but is null");
732
733         assertThatThrownBy(() -> {
734             new PdpProvider().updatePdpStatistics(null, "name", "version", "TYPE", "inst", new PdpStatistics());
735         }).hasMessage("dao is marked @NonNull but is null");
736
737         assertThatThrownBy(() -> {
738             new PdpProvider().updatePdpStatistics(pfDao, null, null, null, null, null);
739         }).hasMessage("pdpGroupName is marked @NonNull but is null");
740
741         assertThatThrownBy(() -> {
742             new PdpProvider().updatePdpStatistics(pfDao, null, null, null, null, new PdpStatistics());
743         }).hasMessage("pdpGroupName is marked @NonNull but is null");
744
745         assertThatThrownBy(() -> {
746             new PdpProvider().updatePdpStatistics(pfDao, null, null, null, "inst", null);
747         }).hasMessage("pdpGroupName is marked @NonNull but is null");
748
749         assertThatThrownBy(() -> {
750             new PdpProvider().updatePdpStatistics(pfDao, null, null, null, "inst", new PdpStatistics());
751         }).hasMessage("pdpGroupName is marked @NonNull but is null");
752
753         assertThatThrownBy(() -> {
754             new PdpProvider().updatePdpStatistics(pfDao, null, null, "TYPE", null, null);
755         }).hasMessage("pdpGroupName is marked @NonNull but is null");
756
757         assertThatThrownBy(() -> {
758             new PdpProvider().updatePdpStatistics(pfDao, null, null, "TYPE", null, new PdpStatistics());
759         }).hasMessage("pdpGroupName is marked @NonNull but is null");
760
761         assertThatThrownBy(() -> {
762             new PdpProvider().updatePdpStatistics(pfDao, null, null, "TYPE", "inst", null);
763         }).hasMessage("pdpGroupName is marked @NonNull but is null");
764
765         assertThatThrownBy(() -> {
766             new PdpProvider().updatePdpStatistics(pfDao, null, null, "TYPE", "inst", new PdpStatistics());
767         }).hasMessage("pdpGroupName is marked @NonNull but is null");
768
769         assertThatThrownBy(() -> {
770             new PdpProvider().updatePdpStatistics(pfDao, null, "version", null, null, null);
771         }).hasMessage("pdpGroupName is marked @NonNull but is null");
772
773         assertThatThrownBy(() -> {
774             new PdpProvider().updatePdpStatistics(pfDao, null, "version", null, null, new PdpStatistics());
775         }).hasMessage("pdpGroupName is marked @NonNull but is null");
776
777         assertThatThrownBy(() -> {
778             new PdpProvider().updatePdpStatistics(pfDao, null, "version", null, "inst", null);
779         }).hasMessage("pdpGroupName is marked @NonNull but is null");
780
781         assertThatThrownBy(() -> {
782             new PdpProvider().updatePdpStatistics(pfDao, null, "version",  null, "inst", new PdpStatistics());
783         }).hasMessage("pdpGroupName is marked @NonNull but is null");
784
785         assertThatThrownBy(() -> {
786             new PdpProvider().updatePdpStatistics(pfDao, null, "version", "TYPE", null, null);
787         }).hasMessage("pdpGroupName is marked @NonNull but is null");
788
789         assertThatThrownBy(() -> {
790             new PdpProvider().updatePdpStatistics(pfDao, null, "version", "TYPE", null, new PdpStatistics());
791         }).hasMessage("pdpGroupName is marked @NonNull but is null");
792
793         assertThatThrownBy(() -> {
794             new PdpProvider().updatePdpStatistics(pfDao, null, "version", "TYPE", "inst", null);
795         }).hasMessage("pdpGroupName is marked @NonNull but is null");
796
797         assertThatThrownBy(() -> {
798             new PdpProvider().updatePdpStatistics(pfDao, null, "version", "TYPE", "inst", new PdpStatistics());
799         }).hasMessage("pdpGroupName is marked @NonNull but is null");
800
801         assertThatThrownBy(() -> {
802             new PdpProvider().updatePdpStatistics(pfDao, "name", null, null, null, null);
803         }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
804
805         assertThatThrownBy(() -> {
806             new PdpProvider().updatePdpStatistics(pfDao, "name", null, null, null, new PdpStatistics());
807         }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
808
809         assertThatThrownBy(() -> {
810             new PdpProvider().updatePdpStatistics(pfDao, "name", null, null, "inst", null);
811         }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
812
813         assertThatThrownBy(() -> {
814             new PdpProvider().updatePdpStatistics(pfDao, "name", null, null, "inst", new PdpStatistics());
815         }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
816
817         assertThatThrownBy(() -> {
818             new PdpProvider().updatePdpStatistics(pfDao, "name", null, "TYPE", null, null);
819         }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
820
821         assertThatThrownBy(() -> {
822             new PdpProvider().updatePdpStatistics(pfDao, "name", null, "TYPE", null, new PdpStatistics());
823         }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
824
825         assertThatThrownBy(() -> {
826             new PdpProvider().updatePdpStatistics(pfDao, "name", null, "TYPE", "inst", null);
827         }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
828
829         assertThatThrownBy(() -> {
830             new PdpProvider().updatePdpStatistics(pfDao, "name", null, "TYPE", "inst", new PdpStatistics());
831         }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
832
833         assertThatThrownBy(() -> {
834             new PdpProvider().updatePdpStatistics(pfDao, "name", "version", null, null, null);
835         }).hasMessage("pdpType is marked @NonNull but is null");
836
837         assertThatThrownBy(() -> {
838             new PdpProvider().updatePdpStatistics(pfDao, "name", "version", null, null, new PdpStatistics());
839         }).hasMessage("pdpType is marked @NonNull but is null");
840
841         assertThatThrownBy(() -> {
842             new PdpProvider().updatePdpStatistics(pfDao, "name", "version", null, "inst", null);
843         }).hasMessage("pdpType is marked @NonNull but is null");
844
845         assertThatThrownBy(() -> {
846             new PdpProvider().updatePdpStatistics(pfDao, "name", "version", null, "inst", new PdpStatistics());
847         }).hasMessage("pdpType is marked @NonNull but is null");
848
849         assertThatThrownBy(() -> {
850             new PdpProvider().updatePdpStatistics(pfDao, "name", "version", "TYPE", null, null);
851         }).hasMessage("pdpInstanceId is marked @NonNull but is null");
852
853         assertThatThrownBy(() -> {
854             new PdpProvider().updatePdpStatistics(pfDao, "name", "version", "TYPE", null, new PdpStatistics());
855         }).hasMessage("pdpInstanceId is marked @NonNull but is null");
856
857         assertThatThrownBy(() -> {
858             new PdpProvider().updatePdpStatistics(pfDao, "name", "version", "TYPE", "inst", null);
859         }).hasMessage("pdpStatistics is marked @NonNull but is null");
860
861         new PdpProvider().updatePdpStatistics(pfDao, "name", "version", "TYPE", "inst", new PdpStatistics());
862     }
863 }