[DCAEGEN2-3386] Create a publisher topic for IBN usecase 57/134057/5
authorqingshuting <qingshuting1@huawei.com>
Tue, 11 Apr 2023 02:27:07 +0000 (10:27 +0800)
committerqingshuting <qingshuting1@huawei.com>
Tue, 11 Apr 2023 06:33:46 +0000 (14:33 +0800)
Issue-ID: DCAEGEN2-3386
Signed-off-by: qingshuting <qingshuting1@huawei.com>
Change-Id: I672878a7547bc0f37296a5c24028040eb57cea8c

components/slice-analysis-ms/ChangeLog.md
components/slice-analysis-ms/pom.xml
components/slice-analysis-ms/src/main/docker/config/sliceanalysisms/config_all.json
components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/dmaap/UUIDmaapClient.java [new file with mode: 0644]
components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/dmaap/NotificationProducerTest.java
components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/dmaap/UUIDmaapClientTest.java [new file with mode: 0644]
components/slice-analysis-ms/src/test/resources/config_all.json
components/slice-analysis-ms/version.properties

index a85827e..93b1572 100644 (file)
@@ -3,6 +3,9 @@ All notable changes to this project will be documented in this file.
 
 The format is based on [Keep a Changelog](http://keepachangelog.com/)
 and this project adheres to [Semantic Versioning](http://semver.org/).
+## [1.2.2] - 2023/04/11
+         - [DCAEGEN2-3386](https://jira.onap.org/browse/DCAEGEN2-3386) - create publisher topics for IBN usecase
+
 ## [1.2.1] - 2023/03/02
          - [DCAEGEN2-3358](https://jira.onap.org/browse/DCAEGEN2-3358) - slice-analysis-ms fails to start
          
index 6d4e8fc..719fac4 100644 (file)
@@ -7,7 +7,7 @@
  *  Copyright (C) 2020-2022 Wipro Limited.
  *  Copyright (C) 2022 Huawei Canada Limited.
  *  Copyright (C) 2022 CTC, Inc.
- *  Copyright (C) 2022 Huawei Technologies Co., Ltd.
+ *  Copyright (C) 2022-2023 Huawei Technologies Co., Ltd. All rights reserved.
  *  Copyright (C) 2023 Deutsche Telekom AG. All rights reserved.
  *  ================================================================================
  *     Licensed under the Apache License, Version 2.0 (the "License");
@@ -37,7 +37,7 @@
         </parent>
         <groupId>org.onap.dcaegen2.services.components</groupId>
         <artifactId>slice-analysis-ms</artifactId>
-        <version>1.2.1-SNAPSHOT</version>
+        <version>1.2.2-SNAPSHOT</version>
         <name>dcaegen2-services-slice-analysis-ms</name>
         <description>Network slice PM analyser</description>
         <packaging>jar</packaging>
index 9e23353..a79b0c0 100644 (file)
           "client_id": "sdnr-sliceanalysis-1"
         },
         "aaf_username": null
+      },
+      "CCVPN_CL_DCAE_EVENT": {
+        "aaf_password": null,
+        "type": "message-router",
+        "dmaap_info": {
+          "topic_url": "http://message-router.onap.svc.cluster.local:3904/events/unauthenticated.CCVPN_CL_DCAE_EVENT",
+          "client_role": "sliceanalysis-subscriber",
+          "location": "onap",
+          "client_id": "sdnr-sliceanalysis-1"
+        },
+        "aaf_username": null
       }
     },
     "postgres.password": "postgres",
diff --git a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/dmaap/UUIDmaapClient.java b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/dmaap/UUIDmaapClient.java
new file mode 100644 (file)
index 0000000..50e2b2f
--- /dev/null
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ *  ============LICENSE_START=======================================================
+ *  slice-analysis-ms
+ *  ================================================================================
+ *   Copyright (C) 2023 Huawei Technologies Co., Ltd. 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.slice.analysis.ms.dmaap;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterPublisher;
+import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishRequest;
+import org.onap.slice.analysis.ms.models.Configuration;
+import org.onap.slice.analysis.ms.utils.DcaeDmaapUtil;
+
+/**
+ * Client class to handle intent analysis server interactions
+ */
+public class UUIDmaapClient {
+
+    private Configuration configuration;
+
+    public UUIDmaapClient(Configuration configuration) {
+        this.configuration = configuration;
+    }
+
+    /**
+     * Method stub for sending notification to UUI intent analysis server.
+     */
+    @SuppressWarnings("unchecked")
+    public boolean sendNotificationToPolicy(String msg) {
+        Map<String, Object> streamsPublishes = configuration.getStreamsPublishes();
+        String topicUrl = ((Map<String, String>) ((Map<String, Object>) streamsPublishes.get("CCVPN_CL_DCAE_EVENT"))
+            .get("dmaap_info")).get("topic_url");
+        try {
+            MessageRouterPublisher publisher = DcaeDmaapUtil.buildPublisher();
+            MessageRouterPublishRequest request = DcaeDmaapUtil.buildPublisherRequest("CCVPN_CL_DCAE_EVENT", topicUrl);
+
+            NotificationProducer notificationProducer = new NotificationProducer(publisher, request);
+            notificationProducer.sendNotification(msg);
+        } catch (IOException e) {
+            return false;
+        }
+        return true;
+    }
+
+}
index d39c0af..03a57b9 100644 (file)
@@ -4,6 +4,7 @@
  *  ================================================================================
  *   Copyright (C) 2020 Wipro Limited.
  *   Copyright (C) 2022 CTC, Inc.
+ *   Copyright (C) 2023 Huawei Technologies Co., Ltd. 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.
@@ -61,9 +62,7 @@ public class NotificationProducerTest {
                     .builder().items(expectedItems.map(JsonPrimitive::new))
                     .build();
             Flux<MessageRouterPublishResponse> responses = Flux.just(expectedResponse);
-//            Flux<JsonPrimitive> singleMessage = Flux.just("msg").map(JsonPrimitive::new);
             when(publisher.put(any(), any())).thenReturn(responses);
-
             notificationProducer.sendNotification("msg");
     }
 }
diff --git a/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/dmaap/UUIDmaapClientTest.java b/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/dmaap/UUIDmaapClientTest.java
new file mode 100644 (file)
index 0000000..97795e5
--- /dev/null
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ *  ============LICENSE_START=======================================================
+ *  slice-analysis-ms
+ *  ================================================================================
+ *   Copyright (C) 2023 Huawei Technologies Co., Ltd. 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.slice.analysis.ms.dmaap;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.google.gson.JsonPrimitive;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterPublisher;
+import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.ImmutableMessageRouterPublishResponse;
+import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishRequest;
+import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishResponse;
+import org.onap.slice.analysis.ms.models.Configuration;
+import org.onap.slice.analysis.ms.utils.DcaeDmaapUtil;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+import reactor.core.publisher.Flux;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+@RunWith(PowerMockRunner.class)
+@PowerMockIgnore({"com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*"})
+@PowerMockRunnerDelegate(SpringRunner.class)
+@PrepareForTest({ DcaeDmaapUtil.class})
+@SpringBootTest(classes = PolicyDmaapClientTest.class)
+public class UUIDmaapClientTest {
+
+    @Mock
+    Configuration configurationMock;
+
+    @InjectMocks
+    UUIDmaapClient uuiDmaapClientTest;
+
+    @Before
+    public void setup() {
+        uuiDmaapClientTest = new UUIDmaapClient(configurationMock);
+    }
+
+    @Test
+    public void sendNotificationToPolicyTest() {
+        Map<String, Object> streamsPublishes = new HashMap<>();
+        Map<String, String> topics = new HashMap<>();
+        Map<String, Object> dmaapInfo = new HashMap<>();
+        topics.put("topic_url", "http://message-router.onap.svc.cluster.local:3904/events/unauthenticated.CCVPN_CL_DCAE_EVENT");
+        dmaapInfo.put("dmaap_info", topics);
+        streamsPublishes.put("CCVPN_CL_DCAE_EVENT", dmaapInfo);
+        Mockito.when(configurationMock.getStreamsPublishes()).thenReturn(streamsPublishes);
+
+        PowerMockito.mockStatic(DcaeDmaapUtil.class);
+        MessageRouterPublisher publisher = PowerMockito.mock(MessageRouterPublisher.class);
+        PowerMockito.when(DcaeDmaapUtil.buildPublisher()).thenReturn(publisher);
+
+        MessageRouterPublishRequest request = PowerMockito.mock(MessageRouterPublishRequest.class);
+        PowerMockito.when(DcaeDmaapUtil.buildPublisherRequest(any(),any())).thenReturn(request);
+
+        io.vavr.collection.List<String> expectedItems = io.vavr.collection.List.of("test1", "test2", "test3");
+        MessageRouterPublishResponse expectedResponse = ImmutableMessageRouterPublishResponse
+            .builder().items(expectedItems.map(JsonPrimitive::new))
+            .build();
+        Flux<MessageRouterPublishResponse> responses = Flux.just(expectedResponse);
+        when(publisher.put(any(), any())).thenReturn(responses);
+
+        uuiDmaapClientTest.sendNotificationToPolicy("msg");
+    }
+}
index fc18cc1..61aab01 100644 (file)
           "client_id": "sdnr-sliceanalysis-1"
         },
         "aaf_username": null
+      },
+      "CCVPN_CL_DCAE_EVENT": {
+        "aaf_password": null,
+        "type": "message-router",
+        "dmaap_info": {
+          "topic_url": "http://message-router.onap.svc.cluster.local:3904/events/unauthenticated.CCVPN_CL_DCAE_EVENT",
+          "client_role": "sliceanalysis-subscriber",
+          "location": "onap",
+          "client_id": "sdnr-sliceanalysis-1"
+        },
+        "aaf_username": null
       }
     },
     "postgres.password": "postgres",
index 8a256cc..8f2e385 100644 (file)
@@ -7,6 +7,7 @@
 #   Copyright (C) 2022 CTC, Inc.
 #   Copyright (c) 2022 Wipro Limited.
 #   Copyright (C) 2023 Deutsche Telekom AG. All rights reserved.
+#   Copyright (C) 2023 Huawei Technologies Co., Ltd. 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.
@@ -24,7 +25,7 @@
 ###############################################################################
 major=1
 minor=2
-patch=1
+patch=2
 base_version=${major}.${minor}.${patch}
 release_version=${base_version}
 snapshot_version=${base_version}-SNAPSHOT