diff --git a/tests/test-loginservice/src/test/java/org/eclipse/jetty/DataSourceLoginServiceTest.java b/tests/test-loginservice/src/test/java/org/eclipse/jetty/DataSourceLoginServiceTest.java index b635cb59804..8a695557b20 100644 --- a/tests/test-loginservice/src/test/java/org/eclipse/jetty/DataSourceLoginServiceTest.java +++ b/tests/test-loginservice/src/test/java/org/eclipse/jetty/DataSourceLoginServiceTest.java @@ -53,29 +53,42 @@ import org.junit.Test; */ public class DataSourceLoginServiceTest { + + public static final String _content = "This is some protected content"; private static File _docRoot; - private static File _dbRoot; private static HttpClient _client; private static String __realm = "DSRealm"; private static URI _baseUri; private static final int __cacheInterval = 200; private static DatabaseLoginServiceTestServer _testServer; + + + @BeforeClass public static void setUp() throws Exception { - _docRoot = MavenTestingUtils.getTargetTestingDir(DataSourceLoginServiceTest.class.getSimpleName()); - FS.ensureEmpty(_docRoot); - + + _docRoot = MavenTestingUtils.getTargetTestingDir("loginservice-test"); + FS.ensureDirExists(_docRoot); + File content = new File(_docRoot,"input.txt"); FileOutputStream out = new FileOutputStream(content); out.write(_content.getBytes("utf-8")); out.close(); - File scriptFile = MavenTestingUtils.getTestResourceFile("createdb.sql"); - _dbRoot = DatabaseLoginServiceTestServer.createDB(scriptFile,"dstest"); + //clear previous runs + File scriptFile = MavenTestingUtils.getTestResourceFile("droptables.sql"); + int result = DatabaseLoginServiceTestServer.runscript(scriptFile); + //ignore result as derby spits errors for dropping tables that dont exist + + //create afresh + scriptFile = MavenTestingUtils.getTestResourceFile("createdb.sql"); + result = DatabaseLoginServiceTestServer.runscript(scriptFile); + assertThat("runScript result",result, is(0)); + _testServer = new DatabaseLoginServiceTestServer(); _testServer.setResourceBase(_docRoot.getAbsolutePath()); _testServer.setLoginService(configureLoginService()); @@ -115,7 +128,8 @@ public class DataSourceLoginServiceTest //create a datasource EmbeddedDataSource ds = new EmbeddedDataSource(); - ds.setDatabaseName(_dbRoot.getAbsolutePath()); + File db = new File (DatabaseLoginServiceTestServer.getDbRoot(), "loginservice"); + ds.setDatabaseName(db.getAbsolutePath()); org.eclipse.jetty.plus.jndi.Resource binding = new org.eclipse.jetty.plus.jndi.Resource(null, "dstest", ds); assertThat("Created binding for dstest", binding, notNullValue()); @@ -157,9 +171,10 @@ public class DataSourceLoginServiceTest protected void changePassword (String user, String newpwd) throws Exception { Loader.loadClass(this.getClass(), "org.apache.derby.jdbc.EmbeddedDriver").newInstance(); - try (Connection connection = DriverManager.getConnection("jdbc:derby:dstest", "", "")) + try (Connection connection = DriverManager.getConnection(DatabaseLoginServiceTestServer.__dbURL, "", ""); + Statement stmt = connection.createStatement()) { - Statement stmt = connection.createStatement(); + connection.setAutoCommit(true); stmt.executeUpdate("update users set pwd='"+newpwd+"' where username='"+user+"'"); } diff --git a/tests/test-loginservice/src/test/java/org/eclipse/jetty/DatabaseLoginServiceTestServer.java b/tests/test-loginservice/src/test/java/org/eclipse/jetty/DatabaseLoginServiceTestServer.java index 322e407c65c..8f81f4e4bb7 100644 --- a/tests/test-loginservice/src/test/java/org/eclipse/jetty/DatabaseLoginServiceTestServer.java +++ b/tests/test-loginservice/src/test/java/org/eclipse/jetty/DatabaseLoginServiceTestServer.java @@ -19,9 +19,6 @@ package org.eclipse.jetty; -import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; - import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; @@ -65,6 +62,7 @@ import org.eclipse.jetty.util.security.Constraint; */ public class DatabaseLoginServiceTestServer { + protected static String __dbURL = "jdbc:derby:loginservice;create=true"; protected Server _server; protected static String _protocol; protected static URI _baseUri; @@ -74,30 +72,30 @@ public class DatabaseLoginServiceTestServer private static File commonDerbySystemHome; protected static String _requestContent; - protected static File createDB(File scriptFile, String dbName) throws Exception + protected static File _dbRoot; + + + static { - if(commonDerbySystemHome == null) - { - commonDerbySystemHome = MavenTestingUtils.getTargetTestingDir("derby-system-common"); - FS.ensureEmpty(commonDerbySystemHome); - System.setProperty("derby.system.home", commonDerbySystemHome.getAbsolutePath()); - } - - String dbUrl = "jdbc:derby:directory:" + dbName + ";create=true"; - + _dbRoot = new File(MavenTestingUtils.getTargetTestingDir("loginservice-test"), "derby"); + FS.ensureDirExists(_dbRoot); + System.setProperty("derby.system.home", _dbRoot.getAbsolutePath()); + } + + public static File getDbRoot () + { + return _dbRoot; + } + + public static int runscript (File scriptFile) throws Exception + { + //System.err.println("Running script:"+scriptFile.getAbsolutePath()); try (FileInputStream fileStream = new FileInputStream(scriptFile)) { Loader.loadClass(fileStream.getClass(), "org.apache.derby.jdbc.EmbeddedDriver").newInstance(); - Connection connection = DriverManager.getConnection(dbUrl, "", ""); - - OutputStream out = new ByteArrayOutputStream(); - int result = ij.runScript(connection, fileStream, "UTF-8", out, "UTF-8"); - - assertThat("runScript result",result, is(0)); - - File dbRoot = new File(commonDerbySystemHome, dbName); - assertThat("exists: " + dbRoot, dbRoot.exists(), is(true)); - return dbRoot; + Connection connection = DriverManager.getConnection(__dbURL, "", ""); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + return ij.runScript(connection, fileStream, "UTF-8", out, "UTF-8"); } } diff --git a/tests/test-loginservice/src/test/java/org/eclipse/jetty/JdbcLoginServiceTest.java b/tests/test-loginservice/src/test/java/org/eclipse/jetty/JdbcLoginServiceTest.java index 8ff5aa8d524..3a21d681492 100644 --- a/tests/test-loginservice/src/test/java/org/eclipse/jetty/JdbcLoginServiceTest.java +++ b/tests/test-loginservice/src/test/java/org/eclipse/jetty/JdbcLoginServiceTest.java @@ -18,8 +18,10 @@ package org.eclipse.jetty; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; + + +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; import java.io.File; import java.io.FileInputStream; @@ -49,6 +51,8 @@ import org.junit.Test; public class JdbcLoginServiceTest { + + private static String _content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In quis felis nunc. "+ "Quisque suscipit mauris et ante auctor ornare rhoncus lacus aliquet. Pellentesque "+ @@ -68,22 +72,31 @@ public class JdbcLoginServiceTest private static String __realm = "JdbcRealm"; private static URI _baseUri; private static DatabaseLoginServiceTestServer _testServer; + + @BeforeClass public static void setUp() throws Exception { - _docRoot = MavenTestingUtils.getTargetTestingDir(JdbcLoginServiceTest.class.getSimpleName()); - FS.ensureEmpty(_docRoot); - + _docRoot = MavenTestingUtils.getTargetTestingDir("loginservice-test"); + FS.ensureDirExists(_docRoot); File content = new File(_docRoot,"input.txt"); + try (FileOutputStream out = new FileOutputStream(content)) { out.write(_content.getBytes("utf-8")); } + + //drop any tables that might have existed + File scriptFile = MavenTestingUtils.getTestResourceFile("droptables.sql"); + int result = DatabaseLoginServiceTestServer.runscript(scriptFile); + //ignore result, if the tables dont already exist, derby spits out an error - File scriptFile = MavenTestingUtils.getTestResourceFile("createdb.sql"); - DatabaseLoginServiceTestServer.createDB(scriptFile,"jdbcrealm"); + //create the tables afresh + scriptFile = MavenTestingUtils.getTestResourceFile("createdb.sql"); + result = DatabaseLoginServiceTestServer.runscript(scriptFile); + assertThat("runScript result",result, is(0)); File jdbcRealmFile = MavenTestingUtils.getTestResourceFile("jdbcrealm.properties"); diff --git a/tests/test-loginservice/src/test/resources/droptables.sql b/tests/test-loginservice/src/test/resources/droptables.sql new file mode 100644 index 00000000000..3a9132d83e6 --- /dev/null +++ b/tests/test-loginservice/src/test/resources/droptables.sql @@ -0,0 +1,6 @@ +DROP TABLE roles; + +DROP TABLE users; + +DROP TABLE user_roles; + diff --git a/tests/test-loginservice/src/test/resources/jdbcrealm.properties b/tests/test-loginservice/src/test/resources/jdbcrealm.properties index bb79638ed60..9045aa1484a 100644 --- a/tests/test-loginservice/src/test/resources/jdbcrealm.properties +++ b/tests/test-loginservice/src/test/resources/jdbcrealm.properties @@ -1,5 +1,5 @@ jdbcdriver = org.apache.derby.jdbc.EmbeddedDriver -url = jdbc:derby:jdbcrealm +url = jdbc:derby:loginservice username = password = usertable = users