370a4114fbb03f0f772f2a0075c81dcfbb623684
[policy/apex-pdp.git] / model / basic-model / src / test / java / org / onap / policy / apex / model / basicmodel / dao / EntityTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
4  *  Modifications Copyright (C) 2020 Nordix Foundation.
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.apex.model.basicmodel.dao;
23
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertNull;
27 import static org.junit.Assert.assertTrue;
28 import static org.junit.Assert.fail;
29
30 import java.util.ArrayList;
31 import java.util.List;
32 import java.util.Set;
33 import java.util.TreeSet;
34 import java.util.UUID;
35 import org.junit.Test;
36 import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
37 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
38 import org.onap.policy.apex.model.basicmodel.concepts.AxKeyInfo;
39 import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
40 import org.onap.policy.apex.model.basicmodel.concepts.DummyEntity;
41
42 /**
43  * JUnit test class.
44  */
45 public class EntityTest {
46     private ApexDao apexDao;
47
48     @Test
49     public void testEntityTestSanity() throws ApexException {
50         final DaoParameters daoParameters = new DaoParameters();
51
52         apexDao = new ApexDaoFactory().createApexDao(daoParameters);
53
54         try {
55             apexDao.init(null);
56             fail("Test should throw an exception here");
57         } catch (final Exception e) {
58             assertEquals("Apex persistence unit parameter not set", e.getMessage());
59         }
60
61         try {
62             apexDao.init(daoParameters);
63             fail("Test should throw an exception here");
64         } catch (final Exception e) {
65             assertEquals("Apex persistence unit parameter not set", e.getMessage());
66         }
67
68         daoParameters.setPluginClass("somewhere.over.the.rainbow");
69         daoParameters.setPersistenceUnit("Dorothy");
70         try {
71             apexDao.init(daoParameters);
72             fail("Test should throw an exception here");
73         } catch (final Exception e) {
74             assertEquals("Creation of Apex persistence unit \"Dorothy\" failed", e.getMessage());
75         }
76         try {
77             apexDao.create(new AxArtifactKey());
78             fail("Test should throw an exception here");
79         } catch (final Exception e) {
80             assertEquals("Apex DAO has not been initialized", e.getMessage());
81         }
82         apexDao.close();
83     }
84
85     @Test
86     public void testEntityTestAllOpsJpa() throws ApexException {
87         final DaoParameters daoParameters = new DaoParameters();
88         daoParameters.setPluginClass("org.onap.policy.apex.model.basicmodel.dao.impl.DefaultApexDao");
89         daoParameters.setPersistenceUnit("DaoTest");
90
91         apexDao = new ApexDaoFactory().createApexDao(daoParameters);
92         apexDao.init(daoParameters);
93
94         testAllOps();
95         apexDao.close();
96     }
97
98     @Test
99     public void testEntityTestBadVals() throws ApexException {
100         final DaoParameters daoParameters = new DaoParameters();
101         daoParameters.setPluginClass("org.onap.policy.apex.model.basicmodel.dao.impl.DefaultApexDao");
102         daoParameters.setPersistenceUnit("DaoTest");
103
104         apexDao = new ApexDaoFactory().createApexDao(daoParameters);
105         apexDao.init(daoParameters);
106
107         final AxArtifactKey nullKey = null;
108         final AxReferenceKey nullRefKey = null;
109         final List<AxArtifactKey> nullKeyList = null;
110         final List<AxArtifactKey> emptyKeyList = new ArrayList<>();
111         final List<AxReferenceKey> nullRKeyList = null;
112         final List<AxReferenceKey> emptyRKeyList = new ArrayList<>();
113
114         apexDao.create(nullKey);
115         apexDao.createCollection(nullKeyList);
116         apexDao.createCollection(emptyKeyList);
117
118         apexDao.delete(nullKey);
119         apexDao.deleteCollection(nullKeyList);
120         apexDao.deleteCollection(emptyKeyList);
121         apexDao.delete(AxArtifactKey.class, nullKey);
122         apexDao.delete(AxReferenceKey.class, nullRefKey);
123         apexDao.deleteByArtifactKey(AxArtifactKey.class, nullKeyList);
124         apexDao.deleteByArtifactKey(AxArtifactKey.class, emptyKeyList);
125         apexDao.deleteByReferenceKey(AxReferenceKey.class, nullRKeyList);
126         apexDao.deleteByReferenceKey(AxReferenceKey.class, emptyRKeyList);
127
128         apexDao.get(null, nullKey);
129         apexDao.get(null, nullRefKey);
130         apexDao.getAll(null);
131         apexDao.getAll(null, nullKey);
132         apexDao.getArtifact(null, nullKey);
133         apexDao.getArtifact(AxArtifactKey.class, nullKey);
134         apexDao.getArtifact(null, nullRefKey);
135         apexDao.getArtifact(AxReferenceKey.class, nullRefKey);
136         apexDao.size(null);
137
138         apexDao.close();
139     }
140
141     private void testAllOps() {
142         final AxArtifactKey aKey0 = new AxArtifactKey("A-KEY0", "0.0.1");
143         final AxArtifactKey aKey1 = new AxArtifactKey("A-KEY1", "0.0.1");
144         final AxArtifactKey aKey2 = new AxArtifactKey("A-KEY2", "0.0.1");
145         final AxKeyInfo keyInfo0 = new AxKeyInfo(aKey0, UUID.fromString("00000000-0000-0000-0000-000000000000"),
146                         "key description 0");
147         final AxKeyInfo keyInfo1 = new AxKeyInfo(aKey1, UUID.fromString("00000000-0000-0000-0000-000000000001"),
148                         "key description 1");
149         final AxKeyInfo keyInfo2 = new AxKeyInfo(aKey2, UUID.fromString("00000000-0000-0000-0000-000000000002"),
150                         "key description 2");
151
152         apexDao.create(keyInfo0);
153
154         final AxKeyInfo keyInfoBack0 = apexDao.get(AxKeyInfo.class, aKey0);
155         assertEquals(keyInfo0, keyInfoBack0);
156
157         final AxKeyInfo keyInfoBackNull = apexDao.get(AxKeyInfo.class, AxArtifactKey.getNullKey());
158         assertNull(keyInfoBackNull);
159
160         final AxKeyInfo keyInfoBack1 = apexDao.getArtifact(AxKeyInfo.class, aKey0);
161         assertEquals(keyInfoBack0, keyInfoBack1);
162
163         final AxKeyInfo keyInfoBack2 = apexDao.getArtifact(AxKeyInfo.class, new AxArtifactKey("A-KEY3", "0.0.1"));
164         assertNull(keyInfoBack2);
165
166         final Set<AxKeyInfo> keyInfoSetIn = new TreeSet<AxKeyInfo>();
167         keyInfoSetIn.add(keyInfo1);
168         keyInfoSetIn.add(keyInfo2);
169
170         apexDao.createCollection(keyInfoSetIn);
171
172         Set<AxKeyInfo> keyInfoSetOut = new TreeSet<AxKeyInfo>(apexDao.getAll(AxKeyInfo.class));
173
174         keyInfoSetIn.add(keyInfo0);
175         assertEquals(keyInfoSetIn, keyInfoSetOut);
176
177         apexDao.delete(keyInfo1);
178         keyInfoSetIn.remove(keyInfo1);
179         keyInfoSetOut = new TreeSet<AxKeyInfo>(apexDao.getAll(AxKeyInfo.class));
180         assertEquals(keyInfoSetIn, keyInfoSetOut);
181
182         apexDao.deleteCollection(keyInfoSetIn);
183         keyInfoSetOut = new TreeSet<AxKeyInfo>(apexDao.getAll(AxKeyInfo.class));
184         assertEquals(0, keyInfoSetOut.size());
185
186         keyInfoSetIn.add(keyInfo0);
187         keyInfoSetIn.add(keyInfo1);
188         keyInfoSetIn.add(keyInfo0);
189         apexDao.createCollection(keyInfoSetIn);
190         keyInfoSetOut = new TreeSet<AxKeyInfo>(apexDao.getAll(AxKeyInfo.class));
191         assertEquals(keyInfoSetIn, keyInfoSetOut);
192
193         apexDao.delete(AxKeyInfo.class, aKey0);
194         keyInfoSetOut = new TreeSet<AxKeyInfo>(apexDao.getAll(AxKeyInfo.class));
195         assertEquals(2, keyInfoSetOut.size());
196         assertEquals(2, apexDao.size(AxKeyInfo.class));
197
198         final Set<AxArtifactKey> keySetIn = new TreeSet<AxArtifactKey>();
199         keySetIn.add(aKey1);
200         keySetIn.add(aKey2);
201
202         final int deletedCount = apexDao.deleteByArtifactKey(AxKeyInfo.class, keySetIn);
203         assertEquals(2, deletedCount);
204
205         keyInfoSetOut = new TreeSet<AxKeyInfo>(apexDao.getAll(AxKeyInfo.class));
206         assertEquals(0, keyInfoSetOut.size());
207
208         keyInfoSetIn.add(keyInfo0);
209         keyInfoSetIn.add(keyInfo1);
210         keyInfoSetIn.add(keyInfo0);
211         apexDao.createCollection(keyInfoSetIn);
212         keyInfoSetOut = new TreeSet<AxKeyInfo>(apexDao.getAll(AxKeyInfo.class));
213         assertEquals(keyInfoSetIn, keyInfoSetOut);
214
215         apexDao.deleteAll(AxKeyInfo.class);
216         assertEquals(0, apexDao.size(AxKeyInfo.class));
217
218         final AxArtifactKey owner0Key = new AxArtifactKey("Owner0", "0.0.1");
219         final AxArtifactKey owner1Key = new AxArtifactKey("Owner1", "0.0.1");
220         final AxArtifactKey owner2Key = new AxArtifactKey("Owner2", "0.0.1");
221         final AxArtifactKey owner3Key = new AxArtifactKey("Owner3", "0.0.1");
222         final AxArtifactKey owner4Key = new AxArtifactKey("Owner4", "0.0.1");
223         final AxArtifactKey owner5Key = new AxArtifactKey("Owner5", "0.0.1");
224
225         apexDao.create(new DummyEntity(new AxReferenceKey(owner0Key, "Entity0"), 100.0));
226         apexDao.create(new DummyEntity(new AxReferenceKey(owner0Key, "Entity1"), 101.0));
227         apexDao.create(new DummyEntity(new AxReferenceKey(owner0Key, "Entity2"), 102.0));
228         apexDao.create(new DummyEntity(new AxReferenceKey(owner0Key, "Entity3"), 103.0));
229         apexDao.create(new DummyEntity(new AxReferenceKey(owner0Key, "Entity4"), 104.0));
230         apexDao.create(new DummyEntity(new AxReferenceKey(owner1Key, "Entity5"), 105.0));
231         apexDao.create(new DummyEntity(new AxReferenceKey(owner1Key, "Entity6"), 106.0));
232         apexDao.create(new DummyEntity(new AxReferenceKey(owner1Key, "Entity7"), 107.0));
233         apexDao.create(new DummyEntity(new AxReferenceKey(owner2Key, "Entity8"), 108.0));
234         apexDao.create(new DummyEntity(new AxReferenceKey(owner2Key, "Entity9"), 109.0));
235         apexDao.create(new DummyEntity(new AxReferenceKey(owner3Key, "EntityA"), 110.0));
236         apexDao.create(new DummyEntity(new AxReferenceKey(owner4Key, "EntityB"), 111.0));
237         apexDao.create(new DummyEntity(new AxReferenceKey(owner5Key, "EntityC"), 112.0));
238         apexDao.create(new DummyEntity(new AxReferenceKey(owner5Key, "EntityD"), 113.0));
239         apexDao.create(new DummyEntity(new AxReferenceKey(owner5Key, "EntityE"), 114.0));
240         apexDao.create(new DummyEntity(new AxReferenceKey(owner5Key, "EntityF"), 115.0));
241
242         TreeSet<DummyEntity> testEntitySetOut = new TreeSet<DummyEntity>(apexDao.getAll(DummyEntity.class));
243         assertEquals(16, testEntitySetOut.size());
244
245         testEntitySetOut = new TreeSet<DummyEntity>(apexDao.getAll(DummyEntity.class, owner0Key));
246         assertEquals(5, testEntitySetOut.size());
247
248         testEntitySetOut = new TreeSet<DummyEntity>(apexDao.getAll(DummyEntity.class, owner1Key));
249         assertEquals(3, testEntitySetOut.size());
250
251         testEntitySetOut = new TreeSet<DummyEntity>(apexDao.getAll(DummyEntity.class, owner2Key));
252         assertEquals(2, testEntitySetOut.size());
253
254         testEntitySetOut = new TreeSet<DummyEntity>(apexDao.getAll(DummyEntity.class, owner3Key));
255         assertEquals(1, testEntitySetOut.size());
256
257         testEntitySetOut = new TreeSet<DummyEntity>(apexDao.getAll(DummyEntity.class, owner4Key));
258         assertEquals(1, testEntitySetOut.size());
259
260         testEntitySetOut = new TreeSet<DummyEntity>(apexDao.getAll(DummyEntity.class, owner5Key));
261         assertEquals(4, testEntitySetOut.size());
262
263         assertNotNull(apexDao.get(DummyEntity.class, new AxReferenceKey(owner0Key, "Entity0")));
264         assertNotNull(apexDao.getArtifact(DummyEntity.class, new AxReferenceKey(owner0Key, "Entity0")));
265         assertNull(apexDao.get(DummyEntity.class, new AxReferenceKey(owner0Key, "Entity1000")));
266         assertNull(apexDao.getArtifact(DummyEntity.class, new AxReferenceKey(owner0Key, "Entity1000")));
267         apexDao.delete(DummyEntity.class, new AxReferenceKey(owner0Key, "Entity0"));
268
269         final Set<AxReferenceKey> rKeySetIn = new TreeSet<AxReferenceKey>();
270         rKeySetIn.add(new AxReferenceKey(owner4Key, "EntityB"));
271         rKeySetIn.add(new AxReferenceKey(owner5Key, "EntityD"));
272
273         final int deletedRCount = apexDao.deleteByReferenceKey(DummyEntity.class, rKeySetIn);
274         assertEquals(2, deletedRCount);
275
276         apexDao.update(new DummyEntity(new AxReferenceKey(owner5Key, "EntityF"), 120.0));
277     }
278 }