Fixed bulletin-board server tests (use temporary db instead of assuming one exists at specific path)
parent
ad121a7bfd
commit
ed28e2eb1b
|
@ -1,5 +1,6 @@
|
||||||
package meerkat.bulletinboard.httpserver;
|
package meerkat.bulletinboard.httpserver;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import javax.servlet.ServletConfig;
|
import javax.servlet.ServletConfig;
|
||||||
|
@ -15,6 +16,8 @@ import meerkat.protobuf.BulletinBoardAPI.*;
|
||||||
|
|
||||||
public class BulletinBoardHttpServer extends HttpServlet {
|
public class BulletinBoardHttpServer extends HttpServlet {
|
||||||
|
|
||||||
|
public final static File DEFAULT_MEERKAT_DB = new File("local-instances/meerkat.db");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Auto-generated UID.
|
* Auto-generated UID.
|
||||||
*/
|
*/
|
||||||
|
@ -28,7 +31,7 @@ public class BulletinBoardHttpServer extends HttpServlet {
|
||||||
bbs = new SQLiteBulletinBoardServer();
|
bbs = new SQLiteBulletinBoardServer();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
bbs.init();
|
bbs.init(DEFAULT_MEERKAT_DB);
|
||||||
} catch (CommunicationException e) {
|
} catch (CommunicationException e) {
|
||||||
// TODO Log error
|
// TODO Log error
|
||||||
throw new ServletException("Servlet failed to initialize: " + e.getMessage());
|
throw new ServletException("Servlet failed to initialize: " + e.getMessage());
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package meerkat.bulletinboard.sqlserver;
|
package meerkat.bulletinboard.sqlserver;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -38,7 +39,7 @@ public abstract class BulletinBoardSQLServer implements BulletinBoardServer{
|
||||||
* 2. Call this procedure
|
* 2. Call this procedure
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void init() throws CommunicationException {
|
public void init(File meerkatDB) throws CommunicationException {
|
||||||
// TODO write signature reading part.
|
// TODO write signature reading part.
|
||||||
|
|
||||||
digest = new SHA256Digest();
|
digest = new SHA256Digest();
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package meerkat.bulletinboard.sqlserver;
|
package meerkat.bulletinboard.sqlserver;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.sql.DriverManager;
|
import java.sql.DriverManager;
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
|
@ -40,14 +41,14 @@ public class SQLiteBulletinBoardServer extends BulletinBoardSQLServer {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init() throws CommunicationException {
|
public void init(File meerkatDB) throws CommunicationException {
|
||||||
|
|
||||||
try{
|
try{
|
||||||
|
String dbString = "jdbc:sqlite:" + meerkatDB.getPath();
|
||||||
connection = DriverManager.getConnection("jdbc:sqlite:local-instances/meerkat.db");
|
connection = DriverManager.getConnection(dbString);
|
||||||
createSchema();
|
createSchema();
|
||||||
|
|
||||||
super.init();
|
super.init(meerkatDB);
|
||||||
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
|
|
||||||
|
|
|
@ -18,16 +18,18 @@ import meerkat.protobuf.BulletinBoardAPI.BulletinBoardMessageList;
|
||||||
import meerkat.protobuf.BulletinBoardAPI.MessageFilterList;
|
import meerkat.protobuf.BulletinBoardAPI.MessageFilterList;
|
||||||
import meerkat.rest.Constants;
|
import meerkat.rest.Constants;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
@Path("/sqlserver")
|
@Path("/sqlserver")
|
||||||
public class BulletinBoardWebApp implements BulletinBoardServer{
|
public class BulletinBoardWebApp implements BulletinBoardServer {
|
||||||
|
|
||||||
BulletinBoardServer bulletinBoard;
|
BulletinBoardServer bulletinBoard;
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
@Override
|
@Override
|
||||||
public void init() throws CommunicationException {
|
public void init(File meerkatDB) throws CommunicationException {
|
||||||
bulletinBoard = new SQLiteBulletinBoardServer();
|
bulletinBoard = new SQLiteBulletinBoardServer();
|
||||||
bulletinBoard.init();
|
bulletinBoard.init(meerkatDB);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Path("postmessage")
|
@Path("postmessage")
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package meerkat.bulletinboard;
|
package meerkat.bulletinboard;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.NoSuchFileException;
|
import java.nio.file.NoSuchFileException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
@ -12,22 +13,11 @@ import meerkat.bulletinboard.sqlserver.SQLiteBulletinBoardServer;
|
||||||
public class BulletinBoardServerTest {
|
public class BulletinBoardServerTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAllServers(){
|
public void testAllServers() throws Exception {
|
||||||
GenericBulletinBoardServerTest bbst = new GenericBulletinBoardServerTest();
|
GenericBulletinBoardServerTest bbst = new GenericBulletinBoardServerTest();
|
||||||
try {
|
|
||||||
try{
|
bbst.init(SQLiteBulletinBoardServer.class);
|
||||||
Path path = Paths.get("local-instances/meerkat.db");
|
bbst.bulkTest();
|
||||||
Files.delete(path);
|
bbst.close();
|
||||||
} catch(NoSuchFileException e){}
|
|
||||||
|
|
||||||
bbst.init(SQLiteBulletinBoardServer.class);
|
|
||||||
bbst.bulkTest();
|
|
||||||
bbst.close();
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
System.err.println(e.getMessage() + e.getClass());
|
|
||||||
assert false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package meerkat.bulletinboard;
|
package meerkat.bulletinboard;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
|
@ -12,6 +13,7 @@ import java.security.SignatureException;
|
||||||
import java.security.UnrecoverableKeyException;
|
import java.security.UnrecoverableKeyException;
|
||||||
import java.security.cert.CertificateException;
|
import java.security.cert.CertificateException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
import com.google.protobuf.ByteString;
|
import com.google.protobuf.ByteString;
|
||||||
|
|
||||||
|
@ -30,7 +32,7 @@ public class GenericBulletinBoardServerTest {
|
||||||
private BulletinBoardServer bulletinBoardServer;
|
private BulletinBoardServer bulletinBoardServer;
|
||||||
private ECDSASignature signers[];
|
private ECDSASignature signers[];
|
||||||
|
|
||||||
private SecureRandom random;
|
private Random random;
|
||||||
|
|
||||||
private static String KEYFILE_EXAMPLE = "/certs/enduser-certs/user1-key-with-password-secret.p12";
|
private static String KEYFILE_EXAMPLE = "/certs/enduser-certs/user1-key-with-password-secret.p12";
|
||||||
private static String KEYFILE_PASSWORD = "secret";
|
private static String KEYFILE_PASSWORD = "secret";
|
||||||
|
@ -41,7 +43,8 @@ public class GenericBulletinBoardServerTest {
|
||||||
|
|
||||||
public void init(Class<?> cls) throws InstantiationException, IllegalAccessException, CertificateException, KeyStoreException, NoSuchAlgorithmException, IOException, UnrecoverableKeyException, CommunicationException{
|
public void init(Class<?> cls) throws InstantiationException, IllegalAccessException, CertificateException, KeyStoreException, NoSuchAlgorithmException, IOException, UnrecoverableKeyException, CommunicationException{
|
||||||
bulletinBoardServer = (BulletinBoardServer) cls.newInstance();
|
bulletinBoardServer = (BulletinBoardServer) cls.newInstance();
|
||||||
bulletinBoardServer.init();
|
|
||||||
|
bulletinBoardServer.init(File.createTempFile("meerkat-test", "db"));
|
||||||
|
|
||||||
signers = new ECDSASignature[2];
|
signers = new ECDSASignature[2];
|
||||||
signers[0] = new ECDSASignature();
|
signers[0] = new ECDSASignature();
|
||||||
|
@ -55,11 +58,11 @@ public class GenericBulletinBoardServerTest {
|
||||||
|
|
||||||
signers[0].loadVerificationCertificates(getClass().getResourceAsStream(CERT1_PEM_EXAMPLE));
|
signers[0].loadVerificationCertificates(getClass().getResourceAsStream(CERT1_PEM_EXAMPLE));
|
||||||
|
|
||||||
random = new SecureRandom();
|
random = new Random(0); // We use insecure randomness in tests for repeatability
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte randomByte(){
|
private byte randomByte(){
|
||||||
return (byte) ((Math.random() * 256) - 128);
|
return (byte) random.nextInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String randomString(){
|
private String randomString(){
|
||||||
|
|
|
@ -3,6 +3,8 @@ package meerkat.bulletinboard;
|
||||||
import meerkat.comm.CommunicationException;
|
import meerkat.comm.CommunicationException;
|
||||||
import meerkat.protobuf.BulletinBoardAPI.*;
|
import meerkat.protobuf.BulletinBoardAPI.*;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Arbel on 07/11/15.
|
* Created by Arbel on 07/11/15.
|
||||||
*
|
*
|
||||||
|
@ -17,7 +19,7 @@ public interface BulletinBoardServer{
|
||||||
* It also establishes the connection to the DB.
|
* It also establishes the connection to the DB.
|
||||||
* @throws CommunicationException on DB connection error.
|
* @throws CommunicationException on DB connection error.
|
||||||
*/
|
*/
|
||||||
public void init() throws CommunicationException;
|
public void init(File meerkatDB) throws CommunicationException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Post a message to bulletin board.
|
* Post a message to bulletin board.
|
||||||
|
|
Loading…
Reference in New Issue