package org.buddycloud.channelserver.db.jdbc;
import java.io.IOException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import junit.framework.Assert;
import org.buddycloud.channelserver.packetHandler.iq.IQTestHandler;
import org.buddycloud.channelserver.pubsub.model.NodeMembershipWithConfiguration;
import org.junit.Test;
import org.xmpp.resultsetmanagement.ResultSet;
public class JDBCNodeStoreSubscriptionsWithConfigurationTest extends JDBCNodeStoreAbstract {
public JDBCNodeStoreSubscriptionsWithConfigurationTest() throws SQLException, IOException,
ClassNotFoundException {
dbTester = new DatabaseTester();
IQTestHandler.readConf();
}
@Test
public void testEmptySubscriptions() throws Exception {
ResultSet<NodeMembershipWithConfiguration> memberships =
store.getUserMembershipsWithConfiguration(TEST_SERVER1_USER1_JID, new LinkedList<String>(),
new HashMap<String, String>());
Assert.assertEquals(0, memberships.size());
}
@Test
public void testSingleSubscriptionWithNoFilter() throws Exception {
dbTester.loadData("node_1");
ResultSet<NodeMembershipWithConfiguration> memberships =
store.getUserMembershipsWithConfiguration(TEST_SERVER1_USER1_JID, new LinkedList<String>(),
new HashMap<String, String>());
Assert.assertEquals(1, memberships.size());
NodeMembershipWithConfiguration membership = memberships.get(0);
Assert.assertEquals("users/node1@server1/posts", membership.getMembership().getNodeId());
Assert.assertTrue(membership.getConfiguration().containsKey("config1"));
Assert.assertTrue(membership.getConfiguration().containsKey("config2"));
}
@Test
public void testSingleSubscriptionWithConfigurationFilter() throws Exception {
dbTester.loadData("node_1");
LinkedList<String> configFilter = new LinkedList<String>();
configFilter.add("config1");
ResultSet<NodeMembershipWithConfiguration> memberships =
store.getUserMembershipsWithConfiguration(TEST_SERVER1_USER1_JID, configFilter,
new HashMap<String, String>());
Assert.assertEquals(1, memberships.size());
NodeMembershipWithConfiguration membership = memberships.get(0);
Assert.assertEquals("users/node1@server1/posts", membership.getMembership().getNodeId());
Assert.assertTrue(membership.getConfiguration().containsKey("config1"));
Assert.assertFalse(membership.getConfiguration().containsKey("config2"));
}
@Test
public void testSingleSubscriptionWithSubscriptionFilter() throws Exception {
dbTester.loadData("node_1");
Map<String, String> subscriptionFilter = new HashMap<String, String>();
subscriptionFilter.put("config1", "anyValue");
ResultSet<NodeMembershipWithConfiguration> memberships =
store.getUserMembershipsWithConfiguration(TEST_SERVER1_USER1_JID, new LinkedList<String>(),
subscriptionFilter);
Assert.assertEquals(0, memberships.size());
}
@Test
public void testSingleSubscriptionWithMatchingSubscriptionFilter() throws Exception {
dbTester.loadData("node_1");
Map<String, String> subscriptionFilter = new HashMap<String, String>();
subscriptionFilter.put("config1", "Value of config1");
ResultSet<NodeMembershipWithConfiguration> memberships =
store.getUserMembershipsWithConfiguration(TEST_SERVER1_USER1_JID, new LinkedList<String>(),
subscriptionFilter);
Assert.assertEquals(1, memberships.size());
NodeMembershipWithConfiguration membership = memberships.get(0);
Assert.assertEquals("users/node1@server1/posts", membership.getMembership().getNodeId());
Assert.assertTrue(membership.getConfiguration().containsKey("config1"));
Assert.assertTrue(membership.getConfiguration().containsKey("config2"));
}
@Test
public void testMultiSubscriptionWithNoFilter() throws Exception {
dbTester.loadData("node_1");
dbTester.loadData("node_2");
ResultSet<NodeMembershipWithConfiguration> memberships =
store.getUserMembershipsWithConfiguration(TEST_SERVER1_USER1_JID, new LinkedList<String>(),
new HashMap<String, String>());
Assert.assertEquals(2, memberships.size());
NodeMembershipWithConfiguration membership1 = memberships.get(0);
Assert.assertEquals("users/node2@server1/posts", membership1.getMembership().getNodeId());
Assert.assertTrue(membership1.getConfiguration().containsKey("config1"));
Assert.assertTrue(membership1.getConfiguration().containsKey("config2"));
NodeMembershipWithConfiguration membership2 = memberships.get(1);
Assert.assertEquals("users/node1@server1/posts", membership2.getMembership().getNodeId());
Assert.assertTrue(membership2.getConfiguration().containsKey("config1"));
Assert.assertTrue(membership2.getConfiguration().containsKey("config2"));
}
@Test
public void testMultiSubscriptionWithConfigurationFilter() throws Exception {
dbTester.loadData("node_1");
dbTester.loadData("node_2");
LinkedList<String> configFilter = new LinkedList<String>();
configFilter.add("config1");
ResultSet<NodeMembershipWithConfiguration> memberships =
store.getUserMembershipsWithConfiguration(TEST_SERVER1_USER1_JID, configFilter,
new HashMap<String, String>());
Assert.assertEquals(2, memberships.size());
NodeMembershipWithConfiguration membership1 = memberships.get(0);
Assert.assertEquals("users/node2@server1/posts", membership1.getMembership().getNodeId());
Assert.assertTrue(membership1.getConfiguration().containsKey("config1"));
Assert.assertFalse(membership1.getConfiguration().containsKey("config2"));
NodeMembershipWithConfiguration membership2 = memberships.get(1);
Assert.assertEquals("users/node1@server1/posts", membership2.getMembership().getNodeId());
Assert.assertTrue(membership2.getConfiguration().containsKey("config1"));
Assert.assertFalse(membership2.getConfiguration().containsKey("config2"));
}
@Test
public void testMultiSubscriptionWithSubscriptionFilter() throws Exception {
dbTester.loadData("node_1");
dbTester.loadData("node_2");
Map<String, String> subscriptionFilter = new HashMap<String, String>();
subscriptionFilter.put("config1", "anyValue");
ResultSet<NodeMembershipWithConfiguration> memberships =
store.getUserMembershipsWithConfiguration(TEST_SERVER1_USER1_JID, new LinkedList<String>(),
subscriptionFilter);
Assert.assertEquals(0, memberships.size());
}
@Test
public void testMultiSubscriptionWithMatchingSubscriptionFilter() throws Exception {
dbTester.loadData("node_1");
dbTester.loadData("node_2");
Map<String, String> subscriptionFilter = new HashMap<String, String>();
subscriptionFilter.put("config1", "Value of config1");
store.setNodeConfValue("users/node1@server1/posts", "config1", "Updated value");
ResultSet<NodeMembershipWithConfiguration> memberships =
store.getUserMembershipsWithConfiguration(TEST_SERVER1_USER1_JID, new LinkedList<String>(),
subscriptionFilter);
Assert.assertEquals(1, memberships.size());
NodeMembershipWithConfiguration membership1 = memberships.get(0);
Assert.assertEquals("users/node2@server1/posts", membership1.getMembership().getNodeId());
Assert.assertTrue(membership1.getConfiguration().containsKey("config1"));
Assert.assertTrue(membership1.getConfiguration().containsKey("config2"));
}
@Test
public void testMultiSubscriptionWithMatchingSubscriptionAndConfigurationFilter() throws Exception {
dbTester.loadData("node_1");
dbTester.loadData("node_2");
Map<String, String> subscriptionFilter = new HashMap<String, String>();
subscriptionFilter.put("config1", "Value of config1");
LinkedList<String> configFilter = new LinkedList<String>();
configFilter.add("config1");
store.setNodeConfValue("users/node1@server1/posts", "config1", "Updated value");
ResultSet<NodeMembershipWithConfiguration> memberships =
store.getUserMembershipsWithConfiguration(TEST_SERVER1_USER1_JID, configFilter, subscriptionFilter);
Assert.assertEquals(1, memberships.size());
NodeMembershipWithConfiguration membership1 = memberships.get(0);
Assert.assertEquals("users/node2@server1/posts", membership1.getMembership().getNodeId());
Assert.assertTrue(membership1.getConfiguration().containsKey("config1"));
Assert.assertFalse(membership1.getConfiguration().containsKey("config2"));
}
}