Refactor first activity strategy and add tests for all strategies
This commit is contained in:
parent
315202d9df
commit
8124192441
@ -167,6 +167,7 @@ public abstract class AbstractActivityManager<Key, Metadata> implements Activity
|
|||||||
if (hasExpired) {
|
if (hasExpired) {
|
||||||
states.remove(key);
|
states.remove(key);
|
||||||
onStateExpire(key, metadata);
|
onStateExpire(key, metadata);
|
||||||
|
shouldReport = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shouldReport && lastReportedTime < lastRecordedTime) {
|
if (shouldReport && lastReportedTime < lastRecordedTime) {
|
||||||
|
|||||||
@ -45,9 +45,6 @@ public class FirstEventActivityStrategy implements ActivityStrategy {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized boolean onReportingPeriodEnd() {
|
public synchronized boolean onReportingPeriodEnd() {
|
||||||
if (!firstEventReceived) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
firstEventReceived = false;
|
firstEventReceived = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,70 @@
|
|||||||
|
/**
|
||||||
|
* ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL
|
||||||
|
*
|
||||||
|
* Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* NOTICE: All information contained herein is, and remains
|
||||||
|
* the property of ThingsBoard, Inc. and its suppliers,
|
||||||
|
* if any. The intellectual and technical concepts contained
|
||||||
|
* herein are proprietary to ThingsBoard, Inc.
|
||||||
|
* and its suppliers and may be covered by U.S. and Foreign Patents,
|
||||||
|
* patents in process, and are protected by trade secret or copyright law.
|
||||||
|
*
|
||||||
|
* Dissemination of this information or reproduction of this material is strictly forbidden
|
||||||
|
* unless prior written permission is obtained from COMPANY.
|
||||||
|
*
|
||||||
|
* Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees,
|
||||||
|
* managers or contractors who have executed Confidentiality and Non-disclosure agreements
|
||||||
|
* explicitly covering such access.
|
||||||
|
*
|
||||||
|
* The copyright notice above does not evidence any actual or intended publication
|
||||||
|
* or disclosure of this source code, which includes
|
||||||
|
* information that is confidential and/or proprietary, and is a trade secret, of COMPANY.
|
||||||
|
* ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE,
|
||||||
|
* OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT
|
||||||
|
* THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED,
|
||||||
|
* AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES.
|
||||||
|
* THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION
|
||||||
|
* DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS,
|
||||||
|
* OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART.
|
||||||
|
*/
|
||||||
|
package org.thingsboard.server.common.transport.activity.strategy;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
|
||||||
|
public class ActivityStrategyFactoryTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreateAllEventsStrategy() {
|
||||||
|
ActivityStrategy strategy = ActivityStrategyFactory.createStrategy("ALL");
|
||||||
|
assertInstanceOf(AllEventsActivityStrategy.class, strategy, "Should return an instance of AllEventsActivityStrategy.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreateFirstEventStrategy() {
|
||||||
|
ActivityStrategy strategy = ActivityStrategyFactory.createStrategy("FIRST");
|
||||||
|
assertInstanceOf(FirstEventActivityStrategy.class, strategy, "Should return an instance of FirstEventActivityStrategy.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreateLastEventStrategy() {
|
||||||
|
ActivityStrategy strategy = ActivityStrategyFactory.createStrategy("LAST");
|
||||||
|
assertInstanceOf(LastEventActivityStrategy.class, strategy, "Should return an instance of LastEventActivityStrategy.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreateFirstAndLastEventStrategy() {
|
||||||
|
ActivityStrategy strategy = ActivityStrategyFactory.createStrategy("FIRST_AND_LAST");
|
||||||
|
assertInstanceOf(FirstAndLastEventActivityStrategy.class, strategy, "Should return an instance of FirstAndLastEventActivityStrategy.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreateUnknownStrategy() {
|
||||||
|
assertThrows(IllegalArgumentException.class, () -> ActivityStrategyFactory.createStrategy("UNKNOWN"),
|
||||||
|
"Should throw IllegalArgumentException for unknown strategy names.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,57 @@
|
|||||||
|
/**
|
||||||
|
* ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL
|
||||||
|
*
|
||||||
|
* Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* NOTICE: All information contained herein is, and remains
|
||||||
|
* the property of ThingsBoard, Inc. and its suppliers,
|
||||||
|
* if any. The intellectual and technical concepts contained
|
||||||
|
* herein are proprietary to ThingsBoard, Inc.
|
||||||
|
* and its suppliers and may be covered by U.S. and Foreign Patents,
|
||||||
|
* patents in process, and are protected by trade secret or copyright law.
|
||||||
|
*
|
||||||
|
* Dissemination of this information or reproduction of this material is strictly forbidden
|
||||||
|
* unless prior written permission is obtained from COMPANY.
|
||||||
|
*
|
||||||
|
* Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees,
|
||||||
|
* managers or contractors who have executed Confidentiality and Non-disclosure agreements
|
||||||
|
* explicitly covering such access.
|
||||||
|
*
|
||||||
|
* The copyright notice above does not evidence any actual or intended publication
|
||||||
|
* or disclosure of this source code, which includes
|
||||||
|
* information that is confidential and/or proprietary, and is a trade secret, of COMPANY.
|
||||||
|
* ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE,
|
||||||
|
* OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT
|
||||||
|
* THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED,
|
||||||
|
* AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES.
|
||||||
|
* THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION
|
||||||
|
* DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS,
|
||||||
|
* OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART.
|
||||||
|
*/
|
||||||
|
package org.thingsboard.server.common.transport.activity.strategy;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
public class AllEventsActivityStrategyTest {
|
||||||
|
|
||||||
|
private AllEventsActivityStrategy strategy;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setUp() {
|
||||||
|
strategy = new AllEventsActivityStrategy();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnActivity() {
|
||||||
|
assertTrue(strategy.onActivity(), "onActivity() should always return true.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnReportingPeriodEnd() {
|
||||||
|
assertTrue(strategy.onReportingPeriodEnd(), "onReportingPeriodEnd() should always return true.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,68 @@
|
|||||||
|
/**
|
||||||
|
* ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL
|
||||||
|
*
|
||||||
|
* Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* NOTICE: All information contained herein is, and remains
|
||||||
|
* the property of ThingsBoard, Inc. and its suppliers,
|
||||||
|
* if any. The intellectual and technical concepts contained
|
||||||
|
* herein are proprietary to ThingsBoard, Inc.
|
||||||
|
* and its suppliers and may be covered by U.S. and Foreign Patents,
|
||||||
|
* patents in process, and are protected by trade secret or copyright law.
|
||||||
|
*
|
||||||
|
* Dissemination of this information or reproduction of this material is strictly forbidden
|
||||||
|
* unless prior written permission is obtained from COMPANY.
|
||||||
|
*
|
||||||
|
* Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees,
|
||||||
|
* managers or contractors who have executed Confidentiality and Non-disclosure agreements
|
||||||
|
* explicitly covering such access.
|
||||||
|
*
|
||||||
|
* The copyright notice above does not evidence any actual or intended publication
|
||||||
|
* or disclosure of this source code, which includes
|
||||||
|
* information that is confidential and/or proprietary, and is a trade secret, of COMPANY.
|
||||||
|
* ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE,
|
||||||
|
* OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT
|
||||||
|
* THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED,
|
||||||
|
* AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES.
|
||||||
|
* THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION
|
||||||
|
* DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS,
|
||||||
|
* OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART.
|
||||||
|
*/
|
||||||
|
package org.thingsboard.server.common.transport.activity.strategy;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
public class FirstAndLastEventActivityStrategyTest {
|
||||||
|
|
||||||
|
private FirstAndLastEventActivityStrategy strategy;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setUp() {
|
||||||
|
strategy = new FirstAndLastEventActivityStrategy();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnActivity_FirstCall() {
|
||||||
|
assertTrue(strategy.onActivity(), "First call of onActivity() should return true.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnActivity_SubsequentCalls() {
|
||||||
|
assertTrue(strategy.onActivity(), "First call of onActivity() should return true.");
|
||||||
|
assertFalse(strategy.onActivity(), "Subsequent calls of onActivity() should return false.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnReportingPeriodEnd() {
|
||||||
|
assertTrue(strategy.onActivity(), "First call of onActivity() should return true.");
|
||||||
|
assertTrue(strategy.onReportingPeriodEnd(), "onReportingPeriodEnd() should always return true.");
|
||||||
|
assertTrue(strategy.onActivity(), "onActivity() should return true after onReportingPeriodEnd() for the next reporting period");
|
||||||
|
assertTrue(strategy.onReportingPeriodEnd(), "onReportingPeriodEnd() should always return true.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,67 @@
|
|||||||
|
/**
|
||||||
|
* ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL
|
||||||
|
*
|
||||||
|
* Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* NOTICE: All information contained herein is, and remains
|
||||||
|
* the property of ThingsBoard, Inc. and its suppliers,
|
||||||
|
* if any. The intellectual and technical concepts contained
|
||||||
|
* herein are proprietary to ThingsBoard, Inc.
|
||||||
|
* and its suppliers and may be covered by U.S. and Foreign Patents,
|
||||||
|
* patents in process, and are protected by trade secret or copyright law.
|
||||||
|
*
|
||||||
|
* Dissemination of this information or reproduction of this material is strictly forbidden
|
||||||
|
* unless prior written permission is obtained from COMPANY.
|
||||||
|
*
|
||||||
|
* Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees,
|
||||||
|
* managers or contractors who have executed Confidentiality and Non-disclosure agreements
|
||||||
|
* explicitly covering such access.
|
||||||
|
*
|
||||||
|
* The copyright notice above does not evidence any actual or intended publication
|
||||||
|
* or disclosure of this source code, which includes
|
||||||
|
* information that is confidential and/or proprietary, and is a trade secret, of COMPANY.
|
||||||
|
* ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE,
|
||||||
|
* OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT
|
||||||
|
* THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED,
|
||||||
|
* AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES.
|
||||||
|
* THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION
|
||||||
|
* DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS,
|
||||||
|
* OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART.
|
||||||
|
*/
|
||||||
|
package org.thingsboard.server.common.transport.activity.strategy;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
public class FirstEventActivityStrategyTest {
|
||||||
|
|
||||||
|
private FirstEventActivityStrategy strategy;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setUp() {
|
||||||
|
strategy = new FirstEventActivityStrategy();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnActivity_FirstCall() {
|
||||||
|
assertTrue(strategy.onActivity(), "First call of onActivity() should return true.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnActivity_SubsequentCalls() {
|
||||||
|
assertTrue(strategy.onActivity(), "First call of onActivity() should return true.");
|
||||||
|
assertFalse(strategy.onActivity(), "Subsequent calls of onActivity() should return false.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnReportingPeriodEnd() {
|
||||||
|
assertTrue(strategy.onActivity(), "First call of onActivity() should return true.");
|
||||||
|
assertFalse(strategy.onReportingPeriodEnd(), "onReportingPeriodEnd() should always return false.");
|
||||||
|
assertTrue(strategy.onActivity(), "onActivity() should return true after onReportingPeriodEnd().");
|
||||||
|
assertFalse(strategy.onReportingPeriodEnd(), "onReportingPeriodEnd() should always return false.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
/**
|
||||||
|
* ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL
|
||||||
|
*
|
||||||
|
* Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* NOTICE: All information contained herein is, and remains
|
||||||
|
* the property of ThingsBoard, Inc. and its suppliers,
|
||||||
|
* if any. The intellectual and technical concepts contained
|
||||||
|
* herein are proprietary to ThingsBoard, Inc.
|
||||||
|
* and its suppliers and may be covered by U.S. and Foreign Patents,
|
||||||
|
* patents in process, and are protected by trade secret or copyright law.
|
||||||
|
*
|
||||||
|
* Dissemination of this information or reproduction of this material is strictly forbidden
|
||||||
|
* unless prior written permission is obtained from COMPANY.
|
||||||
|
*
|
||||||
|
* Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees,
|
||||||
|
* managers or contractors who have executed Confidentiality and Non-disclosure agreements
|
||||||
|
* explicitly covering such access.
|
||||||
|
*
|
||||||
|
* The copyright notice above does not evidence any actual or intended publication
|
||||||
|
* or disclosure of this source code, which includes
|
||||||
|
* information that is confidential and/or proprietary, and is a trade secret, of COMPANY.
|
||||||
|
* ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE,
|
||||||
|
* OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT
|
||||||
|
* THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED,
|
||||||
|
* AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES.
|
||||||
|
* THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION
|
||||||
|
* DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS,
|
||||||
|
* OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART.
|
||||||
|
*/
|
||||||
|
package org.thingsboard.server.common.transport.activity.strategy;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
public class LastEventActivityStrategyTest {
|
||||||
|
|
||||||
|
private LastEventActivityStrategy strategy;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setUp() {
|
||||||
|
strategy = new LastEventActivityStrategy();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnActivity() {
|
||||||
|
assertFalse(strategy.onActivity(), "onActivity() should always return false.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnReportingPeriodEnd() {
|
||||||
|
assertTrue(strategy.onReportingPeriodEnd(), "onReportingPeriodEnd() should always return true.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user