/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.hadoop.metrics2.sink;
import com.microsoft.sqlserver.jdbc.SQLServerDriver;
import org.apache.commons.configuration.SubsetConfiguration;
import org.junit.Assert;
import org.junit.Test;
import java.sql.CallableStatement;
import java.sql.Connection;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
/**
* SqlServerSink Tests.
*/
public abstract class SqlServerSinkTest<T extends SqlServerSink> {
public abstract T createInstance() throws InstantiationException, IllegalAccessException;
@Test
public void testInit() throws Exception {
SubsetConfiguration configuration = createNiceMock(SubsetConfiguration.class);
// set expectations
expect(configuration.getParent()).andReturn(null);
expect(configuration.getPrefix()).andReturn("prefix");
expect(configuration.getString("databaseUrl")).andReturn("url");
// replay
replay(configuration);
SqlServerSink sink = createInstance();
sink.init(configuration);
verify(configuration);
}
@Test
public void testEnsureConnection() throws Exception {
SubsetConfiguration configuration = createNiceMock(SubsetConfiguration.class);
Connection connection = createNiceMock(Connection.class);
// set expectations
expect(configuration.getParent()).andReturn(null);
expect(configuration.getPrefix()).andReturn("prefix");
expect(configuration.getString("databaseUrl")).andReturn("url");
// replay
replay(configuration, connection);
SqlServerSink sink = createInstance();
sink.init(configuration);
Assert.assertTrue(sink.ensureConnection());
SQLServerDriver.setConnection(connection);
Assert.assertTrue(sink.ensureConnection());
verify(configuration, connection);
}
@Test
public void testFlush() throws Exception {
SubsetConfiguration configuration = createNiceMock(SubsetConfiguration.class);
Connection connection = createNiceMock(Connection.class);
// set expectations
expect(configuration.getParent()).andReturn(null);
expect(configuration.getPrefix()).andReturn("prefix");
expect(configuration.getString("databaseUrl")).andReturn("url");
connection.close();
// replay
replay(configuration, connection);
SqlServerSink sink = createInstance();
sink.init(configuration);
SQLServerDriver.setConnection(connection);
sink.ensureConnection();
sink.flush();
verify(configuration, connection);
}
@Test
public void testGetMetricRecordID() throws Exception {
SubsetConfiguration configuration = createNiceMock(SubsetConfiguration.class);
Connection connection = createNiceMock(Connection.class);
CallableStatement cstmt = createNiceMock(CallableStatement.class);
// set expectations
expect(configuration.getParent()).andReturn(null);
expect(configuration.getPrefix()).andReturn("prefix");
expect(configuration.getString("databaseUrl")).andReturn("url");
expect(connection.prepareCall("{call dbo.uspGetMetricRecord(?, ?, ?, ?, ?, ?, ?, ?, ?)}")).andReturn(cstmt);
cstmt.setNString(1, "context");
cstmt.setNString(2, "typeName");
cstmt.setNString(3, "nodeName");
cstmt.setNString(4, "ip");
cstmt.setNString(5, "clusterName");
cstmt.setNString(6, "serviceName");
cstmt.setNString(7, "tagPairs");
cstmt.setLong(8, 9999L);
cstmt.registerOutParameter(9, java.sql.Types.BIGINT);
expect(cstmt.execute()).andReturn(true);
expect(cstmt.getLong(9)).andReturn(99L);
expect(cstmt.wasNull()).andReturn(false);
// replay
replay(configuration, connection, cstmt);
SqlServerSink sink = createInstance();
sink.init(configuration);
SQLServerDriver.setConnection(connection);
Assert.assertEquals(99,
sink.getMetricRecordID("context", "typeName", "nodeName", "ip", "clusterName", "serviceName", "tagPairs", 9999L));
verify(configuration, connection, cstmt);
}
@Test
public void testGetMetricRecordID_nullReturn() throws Exception {
SubsetConfiguration configuration = createNiceMock(SubsetConfiguration.class);
Connection connection = createNiceMock(Connection.class);
CallableStatement cstmt = createNiceMock(CallableStatement.class);
// set expectations
expect(configuration.getParent()).andReturn(null);
expect(configuration.getPrefix()).andReturn("prefix");
expect(configuration.getString("databaseUrl")).andReturn("url");
expect(connection.prepareCall("{call dbo.uspGetMetricRecord(?, ?, ?, ?, ?, ?, ?, ?, ?)}")).andReturn(cstmt);
cstmt.setNString(1, "context");
cstmt.setNString(2, "typeName");
cstmt.setNString(3, "nodeName");
cstmt.setNString(4, "ip");
cstmt.setNString(5, "clusterName");
cstmt.setNString(6, "serviceName");
cstmt.setNString(7, "tagPairs");
cstmt.setLong(8, 9999L);
cstmt.registerOutParameter(9, java.sql.Types.BIGINT);
expect(cstmt.execute()).andReturn(true);
expect(cstmt.getLong(9)).andReturn(99L);
expect(cstmt.wasNull()).andReturn(true);
// replay
replay(configuration, connection, cstmt);
SqlServerSink sink = createInstance();
sink.init(configuration);
SQLServerDriver.setConnection(connection);
Assert.assertEquals(-1,
sink.getMetricRecordID("context", "typeName", "nodeName", "ip", "clusterName", "serviceName", "tagPairs", 9999L));
verify(configuration, connection, cstmt);
}
@Test
public void testInsertMetricValue() throws Exception {
SubsetConfiguration configuration = createNiceMock(SubsetConfiguration.class);
Connection connection = createNiceMock(Connection.class);
CallableStatement cstmt = createNiceMock(CallableStatement.class);
// set expectations
expect(configuration.getParent()).andReturn(null);
expect(configuration.getPrefix()).andReturn("prefix");
expect(configuration.getString("databaseUrl")).andReturn("url");
expect(connection.prepareCall("{call dbo.uspInsertMetricValue(?, ?, ?)}")).andReturn(cstmt);
cstmt.setLong(1, 9999L);
cstmt.setNString(2, "metricName");
cstmt.setNString(3, "metricValue");
expect(cstmt.execute()).andReturn(true);
// replay
replay(configuration, connection, cstmt);
SqlServerSink sink = createInstance();
sink.init(configuration);
SQLServerDriver.setConnection(connection);
sink.insertMetricValue(9999L, "metricName", "metricValue");
verify(configuration, connection, cstmt);
}
public abstract void testPutMetrics() throws Exception;
}