Add unit test for intent analysis 78/130078/2
authorChuanyuChen <chenchuanyu@huawei.com>
Sat, 30 Jul 2022 01:39:36 +0000 (09:39 +0800)
committerChuanyuChen <chenchuanyu@huawei.com>
Wed, 3 Aug 2022 02:25:50 +0000 (10:25 +0800)
Add unit test for intent analysis

Issue-ID: USECASEUI-692

Signed-off-by: ChuanyuChen <chenchuanyu@huawei.com>
Change-Id: If7c8a1ca56c1e8cc07e91729b3d2e38ddb2c855b

intentanalysis/pom.xml
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/util/SpringContextUtil.java [new file with mode: 0644]
intentanalysis/src/test/java/org/onap/usecaseui/intentanalysis/test/IntentAnalysisApplicationTests.java [new file with mode: 0644]
intentanalysis/src/test/java/org/onap/usecaseui/intentanalysis/test/service/IntentServiceTest.java [new file with mode: 0644]
intentanalysis/src/test/resources/application.yaml [new file with mode: 0644]
intentanalysis/src/test/resources/intentdb-test-data.sql [new file with mode: 0644]
intentanalysis/src/test/resources/intentdb-test-init.sql [new file with mode: 0644]

index 03a4731..88c5de6 100644 (file)
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (C) 2022 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.
+ -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
@@ -24,6 +39,8 @@
         <sonar.jacoco.reportMissing.force.zero>true</sonar.jacoco.reportMissing.force.zero>
         <sonar.projectVersion>${project.version}</sonar.projectVersion>
         <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
+        <junit.vintage.version>5.9.0-RC1</junit.vintage.version>
+        <junit.platform.version>1.9.0-RC1</junit.platform.version>
     </properties>
 
     <dependencyManagement>
             <artifactId>javax.persistence</artifactId>
             <version>2.1.0</version>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.13</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.vintage</groupId>
+            <artifactId>junit-vintage-engine</artifactId>
+            <version>${junit.vintage.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <version>${junit.platform.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-commons</artifactId>
+            <version>${junit.platform.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <version>${junit.platform.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jmockit</groupId>
+            <artifactId>jmockit</artifactId>
+            <version>1.19</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jmockit</groupId>
+            <artifactId>jmockit-coverage</artifactId>
+            <version>1.19</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <version>4.4.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <version>2.0.206</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
-
     <build>
         <plugins>
             <plugin>
diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/util/SpringContextUtil.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/util/SpringContextUtil.java
new file mode 100644 (file)
index 0000000..e504858
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ *    Copyright 2022 Huawei Technologies Co., Ltd.
+ *
+ *    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.
+ */
+
+package org.onap.usecaseui.intentanalysis.util;
+
+import org.springframework.context.ApplicationContext;
+
+public class SpringContextUtil {
+
+    private SpringContextUtil() {
+        throw new IllegalStateException("SpringContextUtil class");
+    }
+
+    private static ApplicationContext applicationContext;
+
+    public static ApplicationContext getApplicationContext() {
+        return applicationContext;
+    }
+
+    public static void setApplicationContext(ApplicationContext applicationContext) {
+        SpringContextUtil.applicationContext = applicationContext;
+    }
+
+    public static Object getBean(String name) {
+        return applicationContext.getBean(name);
+    }
+
+    public static Object getBean(Class<?> requiredType) {
+        return applicationContext.getBean(requiredType);
+    }
+}
diff --git a/intentanalysis/src/test/java/org/onap/usecaseui/intentanalysis/test/IntentAnalysisApplicationTests.java b/intentanalysis/src/test/java/org/onap/usecaseui/intentanalysis/test/IntentAnalysisApplicationTests.java
new file mode 100644 (file)
index 0000000..529f08d
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2022 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.onap.usecaseui.intentanalysis.test;
+
+import java.io.IOException;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.mybatis.spring.annotation.MapperScan;
+import org.onap.usecaseui.intentanalysis.util.SpringContextUtil;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.web.filter.OncePerRequestFilter;
+
+@SpringBootApplication(exclude = {SecurityAutoConfiguration.class}, scanBasePackages = "org.onap.usecaseui.intentanalysis")
+@MapperScan(basePackages = {"org.onap.usecaseui.intentanalysis.mapper"})
+@EnableScheduling
+
+public class IntentAnalysisApplicationTests {
+
+    public static void main(String[] args) throws Exception {
+        ApplicationContext applicationContext = SpringApplication.run(IntentAnalysisApplicationTests.class, args);
+        SpringContextUtil.setApplicationContext(applicationContext);
+    }
+
+    @Bean
+    public OncePerRequestFilter accessTokenFilter() {
+        return new OncePerRequestFilter() {
+            @Override
+            protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
+                FilterChain filterChain) throws ServletException, IOException {
+                filterChain.doFilter(request, response);
+            }
+        };
+    }
+}
diff --git a/intentanalysis/src/test/java/org/onap/usecaseui/intentanalysis/test/service/IntentServiceTest.java b/intentanalysis/src/test/java/org/onap/usecaseui/intentanalysis/test/service/IntentServiceTest.java
new file mode 100644 (file)
index 0000000..3a692c0
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2022 Huawei Technologies Co., Ltd.
+ *
+ * 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.
+ */
+
+package org.onap.usecaseui.intentanalysis.test.service;
+
+import java.io.IOException;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.usecaseui.intentanalysis.bean.models.Intent;
+import org.onap.usecaseui.intentanalysis.service.IntentService;
+import org.onap.usecaseui.intentanalysis.test.IntentAnalysisApplicationTests;
+import org.onap.usecaseui.intentanalysis.util.SpringContextUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@SpringBootTest(classes = IntentAnalysisApplicationTests.class)
+@RunWith(SpringRunner.class)
+public class IntentServiceTest extends AbstractJUnit4SpringContextTests {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(IntentServiceTest.class);
+
+    @Autowired
+    private IntentService intentService;
+
+    @Before
+    public void setUp() {
+        SpringContextUtil.setApplicationContext(applicationContext);
+    }
+
+    @Test
+    public void testCreateIntentSuccess() throws IOException {
+        Intent intent = new Intent();
+        intent.setIntentId("testUUID");
+        intent.setIntentName("testIntentName");
+        //ToDo
+        //Intent intentTmp = intentService.createIntent(intent);
+        Assert.assertNotNull(intent);
+    }
+}
diff --git a/intentanalysis/src/test/resources/application.yaml b/intentanalysis/src/test/resources/application.yaml
new file mode 100644 (file)
index 0000000..8ddc4d8
--- /dev/null
@@ -0,0 +1,44 @@
+#
+#    Copyright 2022 Huawei Technologies Co., Ltd.
+#
+#    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.
+#
+
+###pgsql config######
+server:
+  port: 8087
+  ssl:
+    enabled: ${SSL_ENABLED:false}
+    key-store: ${SSL_KEY_STORE_PATH:}
+    key-store-password: ${SSL_KEY_STORE_PASSWORD:}
+    key-store-type: ${SSL_KEY_STORE_TYPE:}
+    key-alias: ${SSL_KEY_ALIAS:}
+spring:
+  datasource:
+    url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;MODE=PostgreSQL
+    username:
+    password:
+    driver-class-name: org.h2.Driver
+    schema: classpath:intentdb-test-init.sql
+    data: classpath:intentdb-test-data.sql
+  main:
+    allow-bean-definition-overriding: true
+
+###mybtis####
+mybatis:
+  mapper-locations: classpath:mybatis/sql/*.xml
+security:
+  oauth2:
+    resource:
+      jwt:
+        key-value: test
diff --git a/intentanalysis/src/test/resources/intentdb-test-data.sql b/intentanalysis/src/test/resources/intentdb-test-data.sql
new file mode 100644 (file)
index 0000000..14cbefc
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : 1
+ Source Server Type    : PostgreSQL
+ Source Server Version : 100011
+ Source Host           : localhost:5432
+ Source Catalog        : exampledb
+ Source Schema         : mec
+
+ Target Server Type    : PostgreSQL
+ Target Server Version : 100011
+ File Encoding         : 65001
+
+ Date: 26/07/2022 10:12:23
+*/
+
+-- ----------------------------
+MERGE INTO intent (intent_id, intent_name)KEY(intent_id)values ('1234','test-intent');
+
+
+MERGE INTO expectation (expectation_id, expectation_name, target_moi, intent_id)KEY(expectation_id)values ('2234','test-expectation',null, '1234');
diff --git a/intentanalysis/src/test/resources/intentdb-test-init.sql b/intentanalysis/src/test/resources/intentdb-test-init.sql
new file mode 100644 (file)
index 0000000..b84f8e3
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : 1
+ Source Server Type    : PostgreSQL
+ Source Server Version : 100011
+ Source Host           : localhost:5432
+ Source Catalog        : exampledb
+ Source Schema         : mec
+
+ Target Server Type    : PostgreSQL
+ Target Server Version : 100011
+ File Encoding         : 65001
+
+ Date: 30/12/2019 14:40:23
+*/
+DROP TABLE IF  EXISTS intent;
+DROP TABLE IF  EXISTS  expectation;
+DROP TABLE  IF  EXISTS state;
+
+CREATE TABLE if NOT EXISTS intent(
+    intent_id varchar(255),
+    intent_name varchar(255),
+    CONSTRAINT intent_test_task_pkey PRIMARY KEY (intent_id)
+);
+
+create table if not exists expectation(
+    expectation_id varchar(255),
+    expectation_name varchar(255),
+    target_moi varchar(255),
+    intent_id varchar(255),
+    CONSTRAINT expectation_test_task_pkey PRIMARY KEY (expectation_id)
+);
+
+create table if not exists state(
+    state_id varchar(255),
+    state_name varchar(255),
+    is_satisfied boolean,
+    condition varchar(255),
+    expectation_id varchar(255),
+    CONSTRAINT state_test_task_pkey PRIMARY KEY (state_id)
+);