blob: fe2711d04e04192169daf48a83c85e1afaa40021 [file] [log] [blame]
package org.eclipse.basyx.regression.sqlproxy;
import static org.junit.Assert.assertTrue;
import java.util.AbstractMap;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.eclipse.basyx.tools.sqlproxy.SQLRootElement;
import org.junit.Test;
/**
* Test SQL map implementation with set operations
*
* @author kuhn
*
*/
public class SQLProxyTestMapSetOperations {
/**
* Store SQL root element reference
* - An SQL root element is the main gateway to a SQL database
*/
protected SQLRootElement sqlRootElement = null;
/**
* Test basic operations
*/
@Test @SuppressWarnings({ "unchecked", "rawtypes" })
public void test() throws Exception {
// Create SQL root element
sqlRootElement = new SQLRootElement(SQLConfig.SQLUSER, SQLConfig.SQLPW, "//localhost/basyx-map?", "org.postgresql.Driver", "jdbc:postgresql:", "root_el_01");
// Drop tables to make sure we start with a fresh database
sqlRootElement.dropTable(1);
sqlRootElement.drop();
// Create new table in database for root element
sqlRootElement.createRootTableIfNotExists();
// Create new SQL map
Map<String, Object> sqlMap = sqlRootElement.createMap(1);
// Clear map to make sure that no old data from previous test runs is stored in it
sqlMap.clear();
// Add multiple elements
Map<String, Object> addedElements1 = new HashMap<>();
// - Add map elements
addedElements1.put("El1", 1);
addedElements1.put("El2", 2);
addedElements1.put("El3", 3);
// - Add elements to map
sqlMap.putAll(addedElements1);
// Test if map is empty
assertTrue(!sqlMap.isEmpty());
// Test map size and contained elements
assertTrue(sqlMap.size() == 3);
assertTrue((int) sqlMap.get("El1") == 1);
assertTrue((int) sqlMap.get("El2") == 2);
assertTrue((int) sqlMap.get("El3") == 3);
// Add multiple elements again
Map<String, Object> addedElements2 = new HashMap<>();
// - Add map elements
addedElements2.put("El1", 'x');
addedElements2.put("El4", 4);
addedElements2.put("El5", 5);
// - Add elements to map
sqlMap.putAll(addedElements2);
// Test map size and contained elements
assertTrue(sqlMap.size() == 5);
assertTrue((char) sqlMap.get("El1") == 'x');
assertTrue((int) sqlMap.get("El2") == 2);
assertTrue((int) sqlMap.get("El3") == 3);
assertTrue((int) sqlMap.get("El4") == 4);
assertTrue((int) sqlMap.get("El5") == 5);
// Change value
sqlMap.put("El5", "xy");
assertTrue(sqlMap.size() == 5);
assertTrue(sqlMap.get("El5").equals("xy"));
// Check key set
// - Expected set
Set<String> keySetBaseLine = new HashSet<>();
keySetBaseLine.add("El1");
keySetBaseLine.add("El2");
keySetBaseLine.add("El3");
keySetBaseLine.add("El4");
keySetBaseLine.add("El5");
assertTrue(((Set) sqlMap.keySet()).containsAll(keySetBaseLine));
assertTrue(keySetBaseLine.containsAll((Set) sqlMap.keySet()));
// Check values
Collection valuesBaseLine1 = new LinkedList<>();
valuesBaseLine1.add('x');
valuesBaseLine1.add(2);
valuesBaseLine1.add(3);
valuesBaseLine1.add(4);
valuesBaseLine1.add("xy");
assertTrue(((Collection) sqlMap.values()).containsAll(valuesBaseLine1));
assertTrue(valuesBaseLine1.containsAll((Collection) sqlMap.values()));
// Change a value again, so that two equal values are in map
sqlMap.put("El3", 2);
// Check values again
Collection valuesBaseLine2 = new LinkedList<>();
valuesBaseLine2.add('x');
valuesBaseLine2.add(2);
valuesBaseLine2.add(2);
valuesBaseLine2.add(4);
valuesBaseLine2.add("xy");
assertTrue(((Collection) sqlMap.values()).containsAll(valuesBaseLine2));
assertTrue(valuesBaseLine2.containsAll((Collection) sqlMap.values()));
// Get entry set
// - Base line entry set
Set<Entry<String, Object>> entrySetBaseLine1 = new HashSet<>();
entrySetBaseLine1.add(new AbstractMap.SimpleEntry<String, Object>("El1", 'x'));
entrySetBaseLine1.add(new AbstractMap.SimpleEntry<String, Object>("El2", 2));
entrySetBaseLine1.add(new AbstractMap.SimpleEntry<String, Object>("El3", 2));
entrySetBaseLine1.add(new AbstractMap.SimpleEntry<String, Object>("El4", 4));
entrySetBaseLine1.add(new AbstractMap.SimpleEntry<String, Object>("El5", "xy"));
assertTrue(((Collection) sqlMap.entrySet()).containsAll(entrySetBaseLine1));
assertTrue(entrySetBaseLine1.containsAll((Collection) sqlMap.entrySet()));
// Clear map, check size
sqlMap.clear();
assertTrue(sqlMap.size() == 0);
// Test if map is empty
assertTrue(sqlMap.isEmpty());
// Drop tables
sqlRootElement.dropTable(1);
// Drop table for root element (= delete it)
sqlRootElement.drop();
}
}