package edu.washington.cs.publickey.storage.sql;
import static org.junit.Assert.fail;
import java.sql.SQLException;
import java.util.List;
import java.util.Random;
import org.jivesoftware.smack.util.Base64;
import org.junit.After;
import org.junit.Test;
import edu.washington.cs.publickey.PublicKeyFriend;
import edu.washington.cs.publickey.PublicKeyFriendTest;
public abstract class PersistentStorageSQLTest {
public static String letters = "abcdefghijklmnopABCDEFGHIJKLMNOP";
public static PublicKeyFriend[] testFriends = new PublicKeyFriend[letters.length()];
public static PublicKeyFriend[] testFriendsBig = new PublicKeyFriend[letters.length() * letters.length() * letters.length()];
static {
byte[] b = new byte[512];
new Random().nextBytes(b);
String s1 = Base64.encodeBytes(b, Base64.DONT_BREAK_LINES);
for (int i = 0; i < b.length - 32; i += 32) {
System.out.println("\"" + s1.substring(i, i + 32) + "\" +");
}
for (int i = 0; i < letters.length(); i++) {
String s = Character.toString((letters.charAt(i)));
testFriends[i] = PublicKeyFriendTest.getTestFriend(s);
}
System.out.println("small test set: " + testFriends.length + " users");
for (int i = 0; i < letters.length(); i++) {
for (int j = 0; j < letters.length(); j++) {
for (int k = 0; k < letters.length(); k++) {
String s = Character.toString((letters.charAt(i)));
String t = Character.toString((letters.charAt(j)));
String u = Character.toString((letters.charAt(k)));
testFriendsBig[i * letters.length() * letters.length() + j * letters.length() + k] = PublicKeyFriendTest.getTestFriend(s + t + u);
}
}
System.out.println("creating test user: " + i * letters.length() * letters.length());
}
System.out.println("big test set " + testFriendsBig.length + " users");
}
protected PersistentStorageSQL p;
/**
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
p.shutdown();
}
public PersistentStorageSQLTest() {
super();
}
protected abstract void clearTables() throws SQLException;
public void profileAddFriends() {
Random r = new Random();
int NUM_FRIENDS = 100;
try {
clearTables();
for (PublicKeyFriend f : testFriendsBig) {
p.addPublicKey(f);
int startNum = r.nextInt(testFriendsBig.length - NUM_FRIENDS);
PublicKeyFriend[] friends = new PublicKeyFriend[NUM_FRIENDS];
System.arraycopy(testFriendsBig, startNum, friends, 0, NUM_FRIENDS);
p.addFriends(f, friends);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
fail(e.getMessage());
}
}
public void profileAddUser() {
try {
clearTables();
for (PublicKeyFriend f : testFriendsBig) {
p.addPublicKey(f);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
fail(e.getMessage());
}
}
@Test
public void testAddFriends() {
try {
System.out.println("\n*******************testAddFriends");
clearTables();
int added = p.addFriends(PublicKeyFriendTest.testFriend1, testFriends);
System.out.println("added " + added + " friends");
if (added != testFriends.length) {
fail("tried to add " + testFriends.length + " friends, but only got " + added);
}
long userId = p.getQueryManager().getUserId(PublicKeyFriendTest.testFriend1.getSourceNetwork(), PublicKeyFriendTest.testFriend1.getSourceNetworkUid());
List<Long> friends = p.getQueryManager().getFriendsOf(userId);
System.out.println("got " + friends.size() + " friends");
if (friends.size() != testFriends.length) {
fail("wrong number of friends: " + friends.size() + "!=" + testFriends.length);
}
added = p.addFriends(PublicKeyFriendTest.testFriend1, testFriends);
if (added != 0) {
fail("we already added the friends");
}
} catch (Exception e) {
e.printStackTrace();
fail("got exception:" + e.getMessage());
}
}
/**
* Test method for
* {@link edu.washington.cs.publickey.storage.sql.derby.PersistentStorageDerby#addPublicKey(edu.washington.cs.publickey.FriendNetwork, java.lang.String, edu.washington.cs.publickey.FriendKeyBean)}
* .
*/
@Test
public void testAddPublicKey() {
System.out.println("\n*******************testAddPublicKey");
try {
clearTables();
// p = new PersistentStorageDerby(DATA_BASE_DIR);
p.addPublicKey(PublicKeyFriendTest.testFriend1);
p.addPublicKey(PublicKeyFriendTest.testFriend1);
} catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
}
/**
* Test method for
* {@link edu.washington.cs.publickey.storage.sql.derby.PersistentStorageDerby#getFriendsPublicKeys(edu.washington.cs.publickey.FriendNetwork, java.lang.String)}
* .
*/
@Test
public void testGetFriendsPublicKeys() {
System.out.println("\n*******************testGetFriendsPublicKeys");
try {
clearTables();
for (int i = 0; i < testFriends.length; i++) {
// make them all friends with each other
p.addPublicKey(testFriends[i]);
p.addFriends(testFriends[i], testFriends);
long user_id = p.getQueryManager().getUserId(testFriends[i].getSourceNetwork(), testFriends[i].getSourceNetworkUid());
List<PublicKeyFriend> friendKeys = p.getQueryManager().getMutualFriendsPublicKeys(user_id);
if (i + 1 != friendKeys.size()) {
fail("wrong count of friend public keys " + friendKeys.size() + " is not " + (i + 1));
}
}
} catch (SQLException e) {
e.printStackTrace();
fail(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
*/
@Test
public void testGetMutualFriends() {
System.out.println("\n*******************testGetMutualFriends");
try {
clearTables();
for (int i = 0; i < testFriends.length; i++) {
// make them all friends with each other
p.addFriends(testFriends[i], testFriends);
long user_id = p.getQueryManager().getUserId(testFriends[i].getSourceNetwork(), testFriends[i].getSourceNetworkUid());
List<Long> mutualFriends = p.getQueryManager().getMutualFriendsOf(user_id);
if (i + 1 != mutualFriends.size()) {
fail("mutual friends returned " + mutualFriends.size() + " exptected " + (i + 1));
}
// System.out.println("mutual friends returned "
// + mutualFriends.size() + " exptected " + (i + 1));
}
} catch (SQLException e) {
e.printStackTrace();
fail(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Test method for
* {@link edu.washington.cs.publickey.storage.sql.derby.PersistentStorageDerby#getOwnPublicKeys(edu.washington.cs.publickey.FriendNetwork, java.lang.String)}
* .
*/
@Test
public void testGetOwnPublicKeys() {
try {
System.out.println("\n*******************testGetOwnPublicKeys");
// clear the tables
clearTables();
// first, add it
for (int i = 0; i < 2; i++) {
p.addPublicKey(PublicKeyFriendTest.testFriend1);
PublicKeyFriend[] keys = p.getOwnPublicKeys(PublicKeyFriendTest.testFriend1);
System.out.println("got: " + keys.length + " keys");
if (keys.length == 1) {
if (!keys[0].equals(PublicKeyFriendTest.testFriend1)) {
fail("got strange keys");
}
} else {
fail("got wrong number of keys");
}
}
} catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
}
}