Java tutorial
/** * Global Sensor Networks (GSN) Source Code * Copyright (c) 2006-2014, Ecole Polytechnique Federale de Lausanne (EPFL) * * This file is part of GSN. * * GSN is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSN is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSN. If not, see <http://www.gnu.org/licenses/>. * * File: src/gsn/vsensor/TestStreamExporterVirtualSensor.java * * @author Jerome Rousselot * @author Ali Salehi * */ package gsn.vsensor; import gsn.beans.DataField; import gsn.beans.DataTypes; import gsn.beans.StreamElement; import gsn.beans.VSensorConfig; import gsn.utils.KeyValueImp; import java.io.Serializable; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Date; import java.util.Vector; import junit.framework.TestCase; import org.apache.commons.collections.KeyValue; public class TestStreamExporterVirtualSensor extends TestCase { private final String user = "sa", passwd = "", db = ".", url = "jdbc:hsqldb:mem:.", streamName = "aJUnitTestStream"; private VSensorConfig config; /* * To run some of these tests, a mysql server must be running on localhost * with the following configuration: a database 'gsntest' must exist. a user * 'gsntest' with password 'gsntest' must exist and have all privileges on * the 'gsntest' database. You can do it with the following: mysql -u -p root * create user 'gsntest' IDENTIFIED BY 'gsntest'; create database gsntest ; * grant ALL ON gsntest.* TO gsntest ; (non-Javadoc) * * @see junit.framework.TestCase#setUp() */ public void setUp() { config = new VSensorConfig(); config.setName("JUnitTestStreamExporterVS"); config.setFileName("PlaceholderfileNameForJUNitTesting"); } public void tearDown() { config = null; try { DriverManager.registerDriver(new org.h2.Driver()); Connection connection = DriverManager.getConnection(url, user, passwd); connection.createStatement().execute("DROP TABLE IF EXISTS " + streamName); } catch (SQLException e) { e.printStackTrace(); } } /* * Tries to instantiate a VS without the required arguments. Should always * fail. */ public void testMissingAllEssentialParameters() { StreamExporterVirtualSensor vs = new StreamExporterVirtualSensor(); assertFalse(vs.initialize()); } /* * Tries to connect to a (supposedly) existing mysql db on local host. See * class comments for more info. Should succeed. */ public void testConnectToExistingMySQLDB() { StreamExporterVirtualSensor vs = new StreamExporterVirtualSensor(); ArrayList<KeyValue> params = new ArrayList<KeyValue>(); params.add(new KeyValueImp(StreamExporterVirtualSensor.PARAM_URL, url)); params.add(new KeyValueImp(StreamExporterVirtualSensor.PARAM_USER, user)); params.add(new KeyValueImp(StreamExporterVirtualSensor.PARAM_PASSWD, passwd)); config.setMainClassInitialParams(params); vs.setVirtualSensorConfiguration(config); assertTrue(vs.initialize()); } /* * Tries to log a line into a Mysql table. The test stream generates data for * each possible data type. */ public void testLogStatementIntoMySQLDB() { StreamExporterVirtualSensor vs = new StreamExporterVirtualSensor(); // configure parameters ArrayList<KeyValue> params = new ArrayList<KeyValue>(); params.add(new KeyValueImp(StreamExporterVirtualSensor.PARAM_URL, url)); params.add(new KeyValueImp(StreamExporterVirtualSensor.PARAM_USER, user)); params.add(new KeyValueImp(StreamExporterVirtualSensor.PARAM_PASSWD, passwd)); config.setMainClassInitialParams(params); vs.setVirtualSensorConfiguration(config); vs.initialize(); // configure datastream Vector<DataField> fieldTypes = new Vector<DataField>(); Object[] data = null; for (String type : DataTypes.TYPE_NAMES) fieldTypes.add(new DataField(type, type, type)); int i = 0; for (Object value : DataTypes.TYPE_SAMPLE_VALUES) data[i++] = value; long timeStamp = new Date().getTime(); StreamElement streamElement = new StreamElement(fieldTypes.toArray(new DataField[] {}), (Serializable[]) data, timeStamp); // give datastream to vs vs.dataAvailable(streamName, streamElement); // clean up and control boolean result = true; try { DriverManager.registerDriver(new com.mysql.jdbc.Driver()); Connection connection = DriverManager.getConnection(url, user, passwd); Statement statement = connection.createStatement(); statement.execute("SELECT * FROM " + streamName); System.out.println("result" + result); result = statement.getResultSet().last(); System.out.println("result" + result); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); result = false; } assertTrue(result); } }