ad4ab6789e035b060e8f986935d5ee89c139f64f
[ccsdk/features.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP : ccsdk features
4  * ================================================================================
5  * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
6  * All rights reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *     http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  *
21  */
22 package org.onap.ccsdk.features.sdnr.wt.dataprovider.dblib.test;
23
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertTrue;
26 import static org.junit.Assert.fail;
27 import java.sql.ResultSet;
28 import java.sql.SQLException;
29 import java.text.ParseException;
30 import java.util.concurrent.TimeUnit;
31 import org.junit.AfterClass;
32 import org.junit.BeforeClass;
33 import org.junit.Test;
34 import org.onap.ccsdk.features.sdnr.wt.common.database.data.AliasesEntryList;
35 import org.onap.ccsdk.features.sdnr.wt.common.database.data.DatabaseVersion;
36 import org.onap.ccsdk.features.sdnr.wt.common.database.data.IndicesEntryList;
37 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBClient;
38 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.SqlDBDataProvider;
39 import org.onap.ccsdk.features.sdnr.wt.dataprovider.dblib.test.util.MariaDBTestBase;
40 import ch.vorburger.exec.ManagedProcessException;
41
42 public class TestCRUDMariaDB {
43
44
45     private static final String TABLE1_NAME = "table1";
46     private static final String TABLE2_NAME = "table2-v6";
47     private static final String TABLE3_NAME = "table3-v6";
48     private static final String VIEW2_NAME = "table2";
49     private static final String VIEW3_NAME = "table3";
50     private static final String TABLE1_MAPPING = "col1 INT PRIMARY KEY, col2 NVARCHAR(30), col3 BOOLEAN";
51     private static final String TABLE2_MAPPING = "col1 INT PRIMARY KEY, col2 NVARCHAR(30), col3 BOOLEAN";
52     private static final String TABLE3_MAPPING = "col1 INT PRIMARY KEY, col2 NVARCHAR(30), col3 BOOLEAN";
53     private static final String DELETE_ALL_FORMAT = "DELETE FROM `%s`";
54     private static final String READ_ALL_FORMAT = "SELECT * FROM `%s`";
55     private static final String TABLE1_INSERT_ENTRY_FORMAT =
56             "INSERT INTO `" + TABLE1_NAME + "` (col1, col2, col3) VALUES(%d,'%s',%d);";
57     private static final String TABLE1_UPDATE_ENTRY_FORMAT =
58             "UPDATE `" + TABLE1_NAME + "` SET col2='%s', col3=%d WHERE col1=%d;";
59     private static final String TABLE1_DELETE_ENTRY_FORMAT = "DELETE FROM `" + TABLE1_NAME + "` WHERE col1=%d;";
60     private static String DBNAME = null;
61
62     private static MariaDBTestBase testBase;
63     private static SqlDBDataProvider dbProvider;
64     private static SqlDBClient dbClient;
65
66     @BeforeClass
67     public static void init() throws Exception {
68
69         testBase = new MariaDBTestBase();
70         dbProvider = testBase.getDbProvider();
71         dbProvider.waitForDatabaseReady(30, TimeUnit.SECONDS);
72         dbClient = testBase.createRawClient();
73         DBNAME = testBase.getDBName();
74     }
75
76     @AfterClass
77     public static void close() {
78         try {
79             testBase.close();
80         } catch (ManagedProcessException e) {
81             e.printStackTrace();
82         }
83     }
84
85     @Test
86     public void test1() {
87         ResultSet data;
88         boolean success;
89         String id = null;
90         //create test1Table
91         success = dbClient.createTable(TABLE1_NAME, TABLE1_MAPPING);
92         assertTrue("failed to create table", success);
93         //delete all
94         try {
95             success = dbClient.delete(String.format(DELETE_ALL_FORMAT, TABLE1_NAME));
96         } catch (SQLException e) {
97             e.printStackTrace();
98         }
99         assertTrue("failed to clear table", success);
100         //test empty
101         data = dbClient.read(String.format(READ_ALL_FORMAT, TABLE1_NAME));
102         try {
103             assertEquals(0, countRows(data));
104         } catch (SQLException e) {
105             e.printStackTrace();
106             fail("unable to read size");
107         }
108         //create entry
109         success = false;
110         try {
111             success = dbClient.write(String.format(TABLE1_INSERT_ENTRY_FORMAT, 10, "hello", 0));
112         } catch (SQLException e) {
113             e.printStackTrace();
114         }
115         assertTrue("failed to write data", success);
116         //verify write
117         data = dbClient.read(String.format(READ_ALL_FORMAT, TABLE1_NAME));
118         try {
119             assertEquals(1, countRows(data));
120             assertTrue(data.next());
121             assertEquals(10, data.getInt(1));
122             assertEquals("hello", data.getString(2));
123             assertEquals(false, data.getBoolean(3));
124         } catch (SQLException e) {
125             e.printStackTrace();
126             fail("unable to verify write");
127         }
128         //update entry
129         success = false;
130         try {
131             success = dbClient.update(String.format(TABLE1_UPDATE_ENTRY_FORMAT, "hello2", 1, 10));
132         } catch (SQLException e) {
133             e.printStackTrace();
134         }
135         assertTrue("failed to update data", success);
136         //verify update
137         data = dbClient.read(String.format(READ_ALL_FORMAT, TABLE1_NAME));
138         try {
139             assertEquals(1, countRows(data));
140             assertTrue(data.next());
141             assertEquals(10, data.getInt(1));
142             assertEquals("hello2", data.getString(2));
143             assertEquals(true, data.getBoolean(3));
144         } catch (SQLException e) {
145             e.printStackTrace();
146             fail("unable to verify write");
147         }
148         //delete entry
149         success = false;
150         try {
151             success = dbClient.delete(String.format(TABLE1_DELETE_ENTRY_FORMAT, 10));
152         } catch (SQLException e) {
153             e.printStackTrace();
154         }
155         assertTrue("failed to delete data", success);
156         //verify delete
157         data = dbClient.read(String.format(READ_ALL_FORMAT, TABLE1_NAME));
158         try {
159             assertEquals(0, data.getFetchSize());
160         } catch (SQLException e) {
161             e.printStackTrace();
162             fail("unable to verify delete. size>0");
163         }
164     }
165
166     @Test
167     public void testDBVersion() {
168         DatabaseVersion version = null;
169         try {
170             version = dbClient.readActualVersion();
171         } catch (SQLException | ParseException e) {
172             e.printStackTrace();
173             fail(e.getMessage());
174         }
175         assertTrue(version.getMajor() >= 10);
176     }
177
178     @Test
179     public void testTableStuff() {
180
181         boolean success;
182         //create Tables/Views
183         success = dbClient.createTable(TABLE2_NAME, TABLE2_MAPPING);
184         assertTrue(success);
185         success = dbClient.createTable(TABLE3_NAME, TABLE3_MAPPING);
186         assertTrue(success);
187         try {
188             success = dbClient.createView(TABLE2_NAME, VIEW2_NAME);
189             assertTrue(success);
190             success = dbClient.createView(TABLE3_NAME, VIEW3_NAME);
191             assertTrue(success);
192         } catch (SQLException e) {
193             e.printStackTrace();
194             fail(e.getMessage());
195         }
196         //read Tables
197         IndicesEntryList tables = dbClient.readTables();
198         assertTrue(tables.stream().filter(t -> t.getName().equals(TABLE2_NAME)).count() == 1);
199         assertTrue(tables.stream().filter(t -> t.getName().equals(TABLE3_NAME)).count() == 1);
200         AliasesEntryList views = dbClient.readViews(DBNAME);
201         assertTrue(views.stream().filter(t -> t.getIndex().equals(TABLE2_NAME) && t.getAlias().equals(VIEW2_NAME))
202                 .count() == 1);
203         assertTrue(views.stream().filter(t -> t.getIndex().equals(TABLE3_NAME) && t.getAlias().equals(VIEW3_NAME))
204                 .count() == 1);
205
206         //delete Tables/Views
207         try {
208             success = dbClient.deleteView(VIEW2_NAME);
209             assertTrue(success);
210             success = dbClient.deleteView(VIEW3_NAME);
211             assertTrue(success);
212             success = dbClient.deleteTable(TABLE2_NAME);
213             assertTrue(success);
214             success = dbClient.deleteTable(TABLE3_NAME);
215             assertTrue(success);
216         } catch (SQLException e) {
217             e.printStackTrace();
218             fail(e.getMessage());
219         }
220         //verify
221         tables = dbClient.readTables();
222         assertTrue(tables.stream().filter(t->t.getName().equals(TABLE2_NAME)).count()==0);
223         assertTrue(tables.stream().filter(t->t.getName().equals(TABLE3_NAME)).count()==0);
224         views = dbClient.readViews(DBNAME);
225         assertEquals(0,views.size());
226     }
227
228     public static int countRows(ResultSet data) throws SQLException {
229         int rows = 0;
230         while (data.next()) {
231             rows++;
232         }
233         data.beforeFirst();
234         return rows;
235     }
236 }