/*
* Copyright 2015 Collective, Inc.
*
* 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 com.collective.celos;
import com.collective.celos.database.JDBCStateDatabase;
import com.collective.celos.database.StateDatabaseConnection;
import junit.framework.Assert;
import org.h2.tools.Server;
import org.junit.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCStateDatabaseTest extends AbstractStateDatabaseTest {
public static final String CREATE_SLOT_STATE_TABLE = "CREATE TABLE SLOTSTATE (" +
"WORKFLOWID VARCHAR(512) NOT NULL, DATE TIMESTAMP NOT NULL, STATUS VARCHAR(512) NOT NULL, " +
"EXTERNALID VARCHAR(512), RETRYCOUNT INTEGER NOT NULL DEFAULT 0)";
public static final String CREATE_RERUN_SLOT_TABLE = "CREATE TABLE RERUNSLOT (" +
"WORKFLOWID VARCHAR(512) NOT NULL, DATE TIMESTAMP NOT NULL, WALLCLOCK TIMESTAMP NOT NULL)";
public static final String CREATE_WORKFLOW_INFO_TABLE = "CREATE TABLE WORKFLOWINFO (" +
"WORKFLOWID VARCHAR(512) NOT NULL, PAUSED BOOLEAN NOT NULL)";
public static final String CREATE_REGISTERS_TABLE = "CREATE TABLE REGISTER (" +
"BUCKETID VARCHAR(512) NOT NULL, KEY VARCHAR(512) NOT NULL, JSON VARCHAR(512) NOT NULL)";
private static Server SERVER;
private static String URL = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1";
private static String USERNAME = "sa";
private static String PASSWORD = "";
private StateDatabaseConnection connection;
@BeforeClass
public static void setupClass() throws Exception {
Class.forName("org.h2.Driver");
SERVER = Server.createTcpServer().start();
try (Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD)) {
try (Statement statement = connection.createStatement()) {
statement.execute(CREATE_SLOT_STATE_TABLE);
statement.execute(CREATE_RERUN_SLOT_TABLE);
statement.execute(CREATE_WORKFLOW_INFO_TABLE);
statement.execute(CREATE_REGISTERS_TABLE);
}
}
}
@AfterClass
public static void tearDownClass() {
SERVER.stop();
}
@Before
public void setUp() throws Exception {
JDBCStateDatabase config = new JDBCStateDatabase(URL, USERNAME, PASSWORD);
connection = config.openConnection();
}
@Override
public StateDatabaseConnection getStateDatabaseConnection() {
return connection;
}
@Test
public void getAndPutWorksWithExternalID() throws Exception {
StateDatabaseConnection db = getStateDatabaseConnection();
SlotID slotID = new SlotID(new WorkflowID("foo"), new ScheduledTime("2013-11-27T14:50Z"));
Assert.assertEquals(null, db.getSlotState(slotID));
String externalID = "externalId1";
String externalID2 = "externalId2";
SlotState state1 = new SlotState(slotID, SlotState.Status.READY, externalID, 5);
SlotState state2 = new SlotState(slotID, SlotState.Status.READY, externalID2, 3);
db.putSlotState(state1);
SlotState newSlotState = db.getSlotState(slotID);
Assert.assertEquals(state1, newSlotState);
Assert.assertEquals(newSlotState.getExternalID(), externalID);
Assert.assertEquals(newSlotState.getRetryCount(), 5);
db.putSlotState(state2);
SlotState newSlotState2 = db.getSlotState(slotID);
Assert.assertEquals(state2, newSlotState2);
Assert.assertEquals(newSlotState2.getExternalID(), externalID2);
Assert.assertEquals(newSlotState2.getRetryCount(), 3);
}
}