e310494450fc1dd729705cf53d4e8dd690dc6f18
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * Copyright (C) 2021-2025 OpenInfra Foundation Europe. All rights reserved.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.clamp.models.acm.persistence.concepts;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.jupiter.api.Assertions.assertEquals;
26 import static org.junit.jupiter.api.Assertions.assertNotEquals;
27 import static org.junit.jupiter.api.Assertions.assertTrue;
28
29 import java.sql.Timestamp;
30 import java.time.Instant;
31 import java.util.ArrayList;
32 import java.util.LinkedHashMap;
33 import java.util.UUID;
34 import org.junit.jupiter.api.Test;
35 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
36 import org.onap.policy.clamp.models.acm.concepts.DeployState;
37 import org.onap.policy.clamp.models.acm.concepts.LockState;
38 import org.onap.policy.clamp.models.acm.concepts.StateChangeResult;
39 import org.onap.policy.clamp.models.acm.concepts.SubState;
40 import org.onap.policy.clamp.models.acm.utils.TimestampHelper;
41
42 /**
43  * Test the{@link JpaAutomationCompositionTest} class.
44  */
45 class JpaAutomationCompositionTest {
46     private static final String NULL_ERROR = " is marked non-null but is null";
47     private static final String INSTANCE_ID = "709c62b3-8918-41b9-a747-d21eb79c6c20";
48     private static final String COMPOSITION_ID = "709c62b3-8918-41b9-a747-e21eb79c6c41";
49
50     @Test
51     void testJpaAutomationCompositionConstructor() {
52         assertThatThrownBy(() -> {
53             new JpaAutomationComposition((JpaAutomationComposition) null);
54         }).hasMessageMatching("copyConcept" + NULL_ERROR);
55
56         assertThatThrownBy(() -> {
57             new JpaAutomationComposition((AutomationComposition) null);
58         }).hasMessageMatching("authorativeConcept" + NULL_ERROR);
59     }
60
61     @Test
62     void testJpaAutomationComposition() {
63         var automationComposition = createAutomationCompositionInstance();
64         var jpaAutomationComposition = new JpaAutomationComposition(automationComposition);
65
66         assertEquals(automationComposition, jpaAutomationComposition.toAuthorative());
67
68         var target = UUID.randomUUID();
69         jpaAutomationComposition.setCompositionTargetId(target.toString());
70         automationComposition.setCompositionTargetId(target);
71         assertEquals(automationComposition, jpaAutomationComposition.toAuthorative());
72
73         assertThatThrownBy(() -> {
74             jpaAutomationComposition.fromAuthorative(null);
75         }).hasMessageMatching("automationComposition" + NULL_ERROR);
76
77         assertThatThrownBy(() -> new JpaAutomationComposition((JpaAutomationComposition) null))
78                 .isInstanceOf(NullPointerException.class);
79
80         var jpaAutomationCompositionFa = new JpaAutomationComposition();
81         jpaAutomationCompositionFa.setInstanceId(null);
82         jpaAutomationCompositionFa.fromAuthorative(automationComposition);
83         assertEquals(jpaAutomationComposition, jpaAutomationCompositionFa);
84
85         assertEquals("automation-composition", jpaAutomationComposition.getName());
86         assertEquals("automation-composition",
87                 new JpaAutomationComposition(createAutomationCompositionInstance()).getName());
88
89         var jpaAutomationComposition2 = new JpaAutomationComposition(jpaAutomationComposition);
90         assertEquals(jpaAutomationComposition, jpaAutomationComposition2);
91     }
92
93     @Test
94     void testJpaAutomationCompositionValidation() {
95         var testJpaAutomationComposition = new JpaAutomationComposition(createAutomationCompositionInstance());
96
97         assertThatThrownBy(() -> testJpaAutomationComposition.validate(null))
98                 .hasMessageMatching("fieldName is marked non-null but is null");
99
100         assertTrue(testJpaAutomationComposition.validate("").isValid());
101     }
102
103     @Test
104     void testJpaAutomationCompositionCompareTo1() {
105         var jpaAutomationComposition = new JpaAutomationComposition(createAutomationCompositionInstance());
106
107         var otherJpaAutomationComposition = new JpaAutomationComposition(jpaAutomationComposition);
108         assertEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
109         assertEquals(-1, jpaAutomationComposition.compareTo(null));
110         assertEquals(0, jpaAutomationComposition.compareTo(jpaAutomationComposition));
111         assertNotEquals(0, jpaAutomationComposition.compareTo(new DummyJpaAutomationCompositionChild()));
112
113         jpaAutomationComposition.setInstanceId("BadValue");
114         assertNotEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
115         jpaAutomationComposition.setInstanceId(INSTANCE_ID);
116         assertEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
117
118         jpaAutomationComposition.setCompositionId(UUID.randomUUID().toString());
119         assertNotEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
120         jpaAutomationComposition.setCompositionId(COMPOSITION_ID);
121         assertEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
122
123         jpaAutomationComposition.setCompositionTargetId(UUID.randomUUID().toString());
124         assertNotEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
125         jpaAutomationComposition.setCompositionTargetId(null);
126         assertEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
127
128         jpaAutomationComposition.setName("BadValue");
129         assertNotEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
130         jpaAutomationComposition.setName("automation-composition");
131         assertEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
132
133         jpaAutomationComposition.setVersion("0.0.0");
134         assertNotEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
135         jpaAutomationComposition.setVersion("0.0.1");
136         assertEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
137
138         jpaAutomationComposition.setLastMsg(Timestamp.from(Instant.EPOCH));
139         assertNotEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
140         jpaAutomationComposition.setLastMsg(otherJpaAutomationComposition.getLastMsg());
141         assertEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
142
143         jpaAutomationComposition.setPhase(0);
144         assertNotEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
145         jpaAutomationComposition.setPhase(null);
146         assertEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
147     }
148
149     @Test
150     void testJpaAutomationCompositionCompareTo2() {
151         var jpaAutomationComposition = new JpaAutomationComposition(createAutomationCompositionInstance());
152         var otherJpaAutomationComposition = new JpaAutomationComposition(jpaAutomationComposition);
153
154         jpaAutomationComposition.setDeployState(DeployState.DEPLOYED);
155         assertNotEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
156         jpaAutomationComposition.setDeployState(DeployState.UNDEPLOYED);
157         assertEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
158
159         jpaAutomationComposition.setLockState(LockState.UNLOCKED);
160         assertNotEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
161         jpaAutomationComposition.setLockState(LockState.NONE);
162         assertEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
163
164         jpaAutomationComposition.setSubState(SubState.PREPARING);
165         assertNotEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
166         jpaAutomationComposition.setSubState(SubState.NONE);
167         assertEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
168
169         jpaAutomationComposition.setDescription("A description");
170         assertNotEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
171         jpaAutomationComposition.setDescription(null);
172         assertEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
173
174         jpaAutomationComposition.setStateChangeResult(StateChangeResult.NO_ERROR);
175         assertEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
176         jpaAutomationComposition.setStateChangeResult(null);
177         assertNotEquals(0, jpaAutomationComposition.compareTo(otherJpaAutomationComposition));
178
179         assertEquals(jpaAutomationComposition, new JpaAutomationComposition(jpaAutomationComposition));
180     }
181
182     @Test
183     void testJpaAutomationCompositionLombok() {
184         var ac0 = new JpaAutomationComposition();
185         ac0.setCompositionId(COMPOSITION_ID);
186
187         assertThat(ac0.toString()).contains("JpaAutomationComposition(");
188         assertThat(ac0.hashCode()).isNotZero();
189         assertNotEquals(null, ac0);
190
191         var ac1 = new JpaAutomationComposition();
192
193         ac1.setCompositionId(UUID.randomUUID().toString());
194         ac1.setDescription("Description");
195         ac1.setElements(new ArrayList<>());
196         ac1.setInstanceId(INSTANCE_ID);
197
198         assertThat(ac1.toString()).contains("AutomationComposition(");
199         assertNotEquals(0, ac1.hashCode());
200         assertNotEquals(ac1, ac0);
201         assertNotEquals(null, ac1);
202
203         assertNotEquals(ac1, ac0);
204
205         var ac2 = new JpaAutomationComposition();
206         ac2.setCompositionId(COMPOSITION_ID);
207         ac2.setInstanceId(ac0.getInstanceId());
208         assertEquals(ac2, ac0);
209     }
210
211     private AutomationComposition createAutomationCompositionInstance() {
212         var testAutomationComposition = new AutomationComposition();
213         testAutomationComposition.setName("automation-composition");
214         testAutomationComposition.setInstanceId(UUID.fromString(INSTANCE_ID));
215         testAutomationComposition.setVersion("0.0.1");
216         testAutomationComposition.setLastMsg(TimestampHelper.now());
217         testAutomationComposition.setCompositionId(UUID.fromString(COMPOSITION_ID));
218         testAutomationComposition.setElements(new LinkedHashMap<>());
219
220         return testAutomationComposition;
221     }
222 }