aboutsummaryrefslogtreecommitdiffstats
path: root/models-interactions/model-impl/events
diff options
context:
space:
mode:
authorjhh <jorge.hernandez-herrero@att.com>2020-01-14 22:48:45 -0600
committerjhh <jorge.hernandez-herrero@att.com>2020-01-16 08:44:53 -0600
commit08d766437dc19037f21b57578448748e013bc031 (patch)
tree1cccd9f08f5d342b160a32c8bcdff37968792c89 /models-interactions/model-impl/events
parentb321d781b99a869e179b8003260f92969a81b43e (diff)
Added Time agnostic Onset and Abated classes
These classes can be used for comparison of alarm skeletons independently of the time at which they were produced. Issue-ID: POLICY-2323 Signed-off-by: jhh <jorge.hernandez-herrero@att.com> Change-Id: I85b9d6a429de56f056eb0a6caa9e4f90fbd68918 Signed-off-by: jhh <jorge.hernandez-herrero@att.com>
Diffstat (limited to 'models-interactions/model-impl/events')
-rw-r--r--models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/Abated.java56
-rw-r--r--models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/CanonicalAbated.java65
-rw-r--r--models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/CanonicalOnset.java65
-rw-r--r--models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopEvent.java26
-rw-r--r--models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/Onset.java58
-rw-r--r--models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/VirtualControlLoopEvent.java12
-rw-r--r--models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/AbatedTest.java55
-rw-r--r--models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/CanonicalAbatedTest.java59
-rw-r--r--models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/CanonicalOnsetTest.java59
-rw-r--r--models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/OnsetTest.java56
10 files changed, 493 insertions, 18 deletions
diff --git a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/Abated.java b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/Abated.java
new file mode 100644
index 000000000..3488e3b6a
--- /dev/null
+++ b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/Abated.java
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop;
+
+import lombok.ToString;
+
+/**
+ * An ABATED event.
+ */
+@ToString(callSuper = true)
+public class Abated extends VirtualControlLoopEvent {
+ private static final long serialVersionUID = -90742191326653587L;
+
+ /**
+ * No arguments constructor.
+ */
+ public Abated() {
+ super();
+ setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
+ }
+
+ /**
+ * Constructor from a VirtualControlLoop event.
+ */
+ public Abated(VirtualControlLoopEvent event) {
+ super(event);
+ setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
+ }
+
+ @Override
+ public void setClosedLoopEventStatus(ControlLoopEventStatus status) {
+ if (status != ControlLoopEventStatus.ABATED) {
+ throw new IllegalArgumentException("Not an ABATED event status");
+ }
+
+ super.setClosedLoopEventStatus(status);
+ }
+}
diff --git a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/CanonicalAbated.java b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/CanonicalAbated.java
new file mode 100644
index 000000000..f1f2db3ff
--- /dev/null
+++ b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/CanonicalAbated.java
@@ -0,0 +1,65 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop;
+
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+
+/**
+ * An ABATED event that determines equality with other ABATED
+ * with only non-time dependent values.
+ */
+
+@NoArgsConstructor
+@ToString(callSuper = true)
+public class CanonicalAbated extends Abated {
+ private static final long serialVersionUID = 284865663873284818L;
+
+ public CanonicalAbated(VirtualControlLoopEvent event) {
+ super(event);
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ // see hashcode method notes
+ return EqualsBuilder.reflectionEquals(
+ this, other, "requestId", "closedLoopAlarmStart", "closedLoopAlarmEnd");
+ }
+
+ @Override
+ public int hashCode() {
+ // The reflection based implementation has been chosen
+ // for maintenance reasons, even though may incur in some
+ // performance overhead. The other possibility is to use
+ // Objects.hash(..) but will require to spell out all fields
+ // to be considered, which are many more than the exceptions,
+ // in addition this class would need to be updated as new fields
+ // are added. Other option to consider in the future is to
+ // restructure the class hierarchy. Note that could not use
+ // lombok annotations to exclude fields from superclasses.
+ return
+ HashCodeBuilder.reflectionHashCode(
+ this, "requestId", "closedLoopAlarmStart", "closedLoopAlarmEnd");
+ }
+
+}
diff --git a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/CanonicalOnset.java b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/CanonicalOnset.java
new file mode 100644
index 000000000..98aa433f2
--- /dev/null
+++ b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/CanonicalOnset.java
@@ -0,0 +1,65 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop;
+
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+
+/**
+ * An ONSET event that determines equality with other ONSET events
+ * with only non-time dependent values.
+ */
+
+@NoArgsConstructor
+@ToString(callSuper = true)
+public class CanonicalOnset extends Onset {
+ private static final long serialVersionUID = 284865663873284818L;
+
+ public CanonicalOnset(VirtualControlLoopEvent event) {
+ super(event);
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ // see hashcode method notes
+ return EqualsBuilder.reflectionEquals(
+ this, other, "requestId", "closedLoopAlarmStart", "closedLoopAlarmEnd");
+ }
+
+ @Override
+ public int hashCode() {
+ // The reflection based implementation has been chosen
+ // for maintenance reasons, even though may incur in some
+ // performance overhead. The other possibility is to use
+ // Objects.hash(..) but will require to spell out all fields
+ // to be considered, which are many more than the exceptions,
+ // in addition this class would need to be updated as new fields
+ // are added. Other option to consider in the future is to
+ // restructure the class hierarchy. Note that could not use
+ // lombok annotations to exclude fields from superclasses.
+ return
+ HashCodeBuilder.reflectionHashCode(
+ this, "requestId", "closedLoopAlarmStart", "closedLoopAlarmEnd");
+ }
+
+}
diff --git a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopEvent.java b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopEvent.java
index bbe902ac2..3106e3909 100644
--- a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopEvent.java
+++ b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopEvent.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* controlloop
* ================================================================================
- * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
* Modifications Copyright (C) 2019 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -35,19 +35,19 @@ public abstract class ControlLoopEvent implements Serializable {
private static final long serialVersionUID = 2391252138583119195L;
@SerializedName("requestID")
- private UUID requestId;
+ protected UUID requestId;
@SerializedName("target_type")
- private String targetType;
- private String closedLoopControlName;
- private String version = "1.0.2";
- private String closedLoopEventClient;
- private String target;
- private String from;
- private String policyScope;
- private String policyName;
- private String policyVersion;
- private ControlLoopEventStatus closedLoopEventStatus;
- private Map<String, String> additionalEventParams;
+ protected String targetType;
+ protected String closedLoopControlName;
+ protected String version = "1.0.2";
+ protected String closedLoopEventClient;
+ protected String target;
+ protected String from;
+ protected String policyScope;
+ protected String policyName;
+ protected String policyVersion;
+ protected ControlLoopEventStatus closedLoopEventStatus;
+ protected Map<String, String> additionalEventParams;
/**
* Construct an instance from an existing instance.
diff --git a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/Onset.java b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/Onset.java
new file mode 100644
index 000000000..41a0ebab4
--- /dev/null
+++ b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/Onset.java
@@ -0,0 +1,58 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop;
+
+import lombok.NonNull;
+import lombok.ToString;
+
+/**
+ * An ONSET event.
+ */
+
+@ToString(callSuper = true)
+public class Onset extends VirtualControlLoopEvent {
+ private static final long serialVersionUID = -90742191326653587L;
+
+ /**
+ * No arguments constructor.
+ */
+ public Onset() {
+ super();
+ setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
+ }
+
+ /**
+ * Constructor from a VirtualControlLoop event.
+ */
+ public Onset(@NonNull VirtualControlLoopEvent event) {
+ super(event);
+ setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
+ }
+
+ @Override
+ public void setClosedLoopEventStatus(ControlLoopEventStatus status) {
+ if (status != ControlLoopEventStatus.ONSET) {
+ throw new IllegalArgumentException("Not an ONSET event status");
+ }
+
+ super.setClosedLoopEventStatus(status);
+ }
+}
diff --git a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/VirtualControlLoopEvent.java b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/VirtualControlLoopEvent.java
index 24cc81dcd..3319105ea 100644
--- a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/VirtualControlLoopEvent.java
+++ b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/VirtualControlLoopEvent.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* controlloop
* ================================================================================
- * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
* Modifications Copyright (C) 2019 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -29,19 +29,21 @@ import java.util.Map;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
+import lombok.ToString;
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
+@ToString(callSuper = true)
public class VirtualControlLoopEvent extends ControlLoopEvent {
private static final long serialVersionUID = -5752405682246066226L;
@SerializedName("AAI")
- private Map<String, String> aai = new HashMap<>();
- private String payload;
- private Instant closedLoopAlarmStart;
- private Instant closedLoopAlarmEnd;
+ protected Map<String, String> aai = new HashMap<>();
+ protected String payload;
+ protected Instant closedLoopAlarmStart;
+ protected Instant closedLoopAlarmEnd;
/**
* Construct an instance from an existing instance.
diff --git a/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/AbatedTest.java b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/AbatedTest.java
new file mode 100644
index 000000000..e1ef77e22
--- /dev/null
+++ b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/AbatedTest.java
@@ -0,0 +1,55 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop;
+
+import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+import java.time.Instant;
+import org.junit.Test;
+
+public class AbatedTest {
+
+ @Test
+ public void testConstructors() {
+ VirtualControlLoopEvent event = new VirtualControlLoopEvent();
+ event.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
+ event.setClosedLoopAlarmStart(Instant.now());
+ event.setClosedLoopAlarmEnd(Instant.now());
+
+ Abated abated = new Abated(event);
+ assertEquals(abated, event);
+ assertEquals(event.getClosedLoopAlarmStart(), abated.getClosedLoopAlarmStart());
+ assertEquals(ControlLoopEventStatus.ABATED, abated.getClosedLoopEventStatus());
+
+ abated.setClosedLoopAlarmEnd(Instant.now());
+ assertNotEquals(abated, event);
+
+ assertEquals(new Abated(abated), abated);
+ }
+
+ @Test
+ public void testSetClosedLoopEventStatus() {
+ assertThatIllegalArgumentException()
+ .isThrownBy(() -> new Abated().setClosedLoopEventStatus(ControlLoopEventStatus.ONSET));
+ }
+} \ No newline at end of file
diff --git a/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/CanonicalAbatedTest.java b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/CanonicalAbatedTest.java
new file mode 100644
index 000000000..d7007bc97
--- /dev/null
+++ b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/CanonicalAbatedTest.java
@@ -0,0 +1,59 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+import java.time.Instant;
+import java.util.UUID;
+import org.junit.Test;
+
+public class CanonicalAbatedTest {
+
+ @Test
+ public void testConstructors() {
+ CanonicalAbated abated1 = new CanonicalAbated(new VirtualControlLoopEvent());
+ abated1.setRequestId(UUID.randomUUID());
+ abated1.setClosedLoopAlarmStart(Instant.now());
+ abated1.setClosedLoopAlarmEnd(Instant.now());
+
+ CanonicalAbated abated2 = new CanonicalAbated(new Abated());
+ abated2.setRequestId(UUID.randomUUID());
+ abated2.setClosedLoopAlarmStart(Instant.now());
+ abated2.setClosedLoopAlarmEnd(Instant.now());
+
+ CanonicalAbated abated3 = new CanonicalAbated(abated2);
+
+ assertEquals(abated1, abated2);
+ assertEquals(abated1, abated3);
+ assertEquals(ControlLoopEventStatus.ABATED, abated1.getClosedLoopEventStatus());
+ assertEquals(ControlLoopEventStatus.ABATED, abated2.getClosedLoopEventStatus());
+ assertEquals(ControlLoopEventStatus.ABATED, abated3.getClosedLoopEventStatus());
+
+ assertNotEquals(abated1.getRequestId(), abated2.getRequestId());
+ assertNotEquals(abated1.getClosedLoopAlarmStart(), abated2.getClosedLoopAlarmStart());
+ assertNotEquals(abated1.getClosedLoopAlarmEnd(), abated2.getClosedLoopAlarmEnd());
+
+ abated2.setFrom("here");
+ assertNotEquals(abated1, abated2);
+ }
+} \ No newline at end of file
diff --git a/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/CanonicalOnsetTest.java b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/CanonicalOnsetTest.java
new file mode 100644
index 000000000..7b0a43f9e
--- /dev/null
+++ b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/CanonicalOnsetTest.java
@@ -0,0 +1,59 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+import java.time.Instant;
+import java.util.UUID;
+import org.junit.Test;
+
+public class CanonicalOnsetTest {
+
+ @Test
+ public void testConstructors() {
+ CanonicalOnset onset1 = new CanonicalOnset(new VirtualControlLoopEvent());
+ onset1.setRequestId(UUID.randomUUID());
+ onset1.setClosedLoopAlarmStart(Instant.now());
+ onset1.setClosedLoopAlarmEnd(Instant.now());
+
+ CanonicalOnset onset2 = new CanonicalOnset(new Onset());
+ onset2.setRequestId(UUID.randomUUID());
+ onset2.setClosedLoopAlarmStart(Instant.now());
+ onset2.setClosedLoopAlarmEnd(Instant.now());
+
+ CanonicalOnset onset3 = new CanonicalOnset(onset2);
+
+ assertEquals(onset1, onset2);
+ assertEquals(onset1, onset3);
+ assertEquals(ControlLoopEventStatus.ONSET, onset1.getClosedLoopEventStatus());
+ assertEquals(ControlLoopEventStatus.ONSET, onset2.getClosedLoopEventStatus());
+ assertEquals(ControlLoopEventStatus.ONSET, onset3.getClosedLoopEventStatus());
+
+ assertNotEquals(onset1.getRequestId(), onset2.getRequestId());
+ assertNotEquals(onset1.getClosedLoopAlarmStart(), onset2.getClosedLoopAlarmStart());
+ assertNotEquals(onset1.getClosedLoopAlarmEnd(), onset2.getClosedLoopAlarmEnd());
+
+ onset2.setFrom("here");
+ assertNotEquals(onset1, onset2);
+ }
+} \ No newline at end of file
diff --git a/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/OnsetTest.java b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/OnsetTest.java
new file mode 100644
index 000000000..b229b024b
--- /dev/null
+++ b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/OnsetTest.java
@@ -0,0 +1,56 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop;
+
+import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+import java.time.Instant;
+import org.junit.Test;
+
+public class OnsetTest {
+
+ @Test
+ public void testConstructors() {
+ VirtualControlLoopEvent event = new VirtualControlLoopEvent();
+ event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
+ event.setClosedLoopAlarmStart(Instant.now());
+ event.setClosedLoopAlarmEnd(Instant.now());
+
+ Onset onset = new Onset(event);
+ assertEquals(onset, event);
+ assertEquals(event.getClosedLoopAlarmStart(), onset.getClosedLoopAlarmStart());
+ assertEquals(ControlLoopEventStatus.ONSET, onset.getClosedLoopEventStatus());
+ assertEquals(event.getClosedLoopAlarmEnd(), onset.getClosedLoopAlarmEnd());
+
+ onset.setClosedLoopAlarmEnd(Instant.now());
+ assertNotEquals(onset, event);
+
+ assertEquals(new Onset(onset), onset);
+ }
+
+ @Test
+ public void testSetClosedLoopEventStatus() {
+ assertThatIllegalArgumentException()
+ .isThrownBy(() -> new Onset().setClosedLoopEventStatus(ControlLoopEventStatus.ABATED));
+ }
+} \ No newline at end of file