/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library 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 Lesser General Public License for more * details. */ package com.liferay.portal.tools.db.support.commands; import com.liferay.portal.tools.db.support.DBSupportArgs; import com.liferay.portal.tools.db.support.util.DBTestUtil; import java.io.File; import java.io.IOException; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import org.junit.Assert; import org.junit.Test; /** * @author Andrea Di Giorgi */ public class CleanServiceBuilderCommandTest extends BaseCommandTestCase { public CleanServiceBuilderCommandTest(String mode) throws IOException { super(mode); } @Test public void testCleanServiceBuilderDefault() throws Exception { _testCleanServiceBuilder( "default", "SampleBar", "Sample_Foo", "Sample_User"); } @Test public void testCleanServiceBuilderNoAutoNamespace() throws Exception { _testCleanServiceBuilder( "no-auto-namespace", "Foo", "SampleBar", "User_"); } protected void cleanServiceBuilder( File serviceXmlFile, String servletContextName, String url) throws Exception { CleanServiceBuilderCommand cleanServiceBuilderCommand = new CleanServiceBuilderCommand(); cleanServiceBuilderCommand.setServiceXmlFile(serviceXmlFile); cleanServiceBuilderCommand.setServletContextName(_SERVLET_CONTEXT_NAME); DBSupportArgs dbSupportArgs = new DBSupportArgs(); dbSupportArgs.setUrl(url); cleanServiceBuilderCommand.execute(dbSupportArgs); } private void _addReleaseRow( PreparedStatement preparedStatement, long releaseId, String servletContextName, int buildNumber) throws SQLException { preparedStatement.setLong(1, 0); preparedStatement.setLong(2, releaseId); preparedStatement.setString(3, servletContextName); preparedStatement.setInt(4, buildNumber); preparedStatement.setBoolean(5, true); preparedStatement.setInt(6, 1); Assert.assertEquals(1, preparedStatement.executeUpdate()); } private void _addServiceComponentRow( PreparedStatement preparedStatement, long serviceComponentId, String buildNamespace, int buildNumber) throws SQLException { preparedStatement.setLong(1, 0); preparedStatement.setLong(2, serviceComponentId); preparedStatement.setString(3, buildNamespace); preparedStatement.setInt(4, buildNumber); preparedStatement.setLong(5, System.currentTimeMillis()); Assert.assertEquals(1, preparedStatement.executeUpdate()); } private void _testCleanServiceBuilder(String prefix, String... tableNames) throws Exception { String url = getUrl( "init.sql", prefix + "-tables.sql", prefix + "-indexes.sql"); try (Connection connection = DriverManager.getConnection(url)) { DatabaseMetaData databaseMetaData = connection.getMetaData(); DBTestUtil.assertTableExists(databaseMetaData, "Release_"); DBTestUtil.assertTableExists(databaseMetaData, "ServiceComponent"); for (String tableName : tableNames) { DBTestUtil.assertTableExists(databaseMetaData, tableName); } String sql = "insert into Release_ (mvccVersion, releaseId, " + "servletContextName, buildNumber, verified, state_) " + "values (?, ?, ?, ?, ?, ?)"; try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) { _addReleaseRow( preparedStatement, 1, _SERVLET_CONTEXT_NAME, _BUILD_NUMBER); _addReleaseRow(preparedStatement, 2, "foo.bar", 1); } sql = "insert into ServiceComponent (mvccVersion, " + "serviceComponentId, buildNamespace, buildNumber, " + "buildDate) values (?, ?, ?, ?, ?)"; try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) { for (int buildNumber = 1; buildNumber <= _BUILD_NUMBER; buildNumber++) { _addServiceComponentRow( preparedStatement, buildNumber, _NAMESPACE, buildNumber); } } } url = getUrl(); File serviceXmlFile = new File( dependenciesDir, prefix + "-service.xml"); cleanServiceBuilder(serviceXmlFile, _SERVLET_CONTEXT_NAME, url); try (Connection connection = DriverManager.getConnection(url)) { DBTestUtil.assertTableRowCount(connection, "Release_", 1); DBTestUtil.assertTableRowCount(connection, "ServiceComponent", 0); DatabaseMetaData databaseMetaData = connection.getMetaData(); for (String tableName : tableNames) { DBTestUtil.assertTableNotExists(databaseMetaData, tableName); } } } private static final int _BUILD_NUMBER = 5; private static final String _NAMESPACE = "Sample"; private static final String _SERVLET_CONTEXT_NAME = "com.example.sample.service"; }