/*
* (C) 2007-2012 Alibaba Group Holding Limited.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.taobao.gecko.service.impl;
import java.util.List;
import java.util.Set;
import junit.framework.Assert;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.taobao.gecko.service.Connection;
import com.taobao.gecko.service.config.ClientConfig;
import com.taobao.gecko.service.mock.MockSession;
import com.taobao.gecko.service.notify.NotifyCommandFactory;
/**
*
*
*
* @author boyan
*
* @since 1.0, 2009-12-22 ����03:59:52
*/
public class GroupManagerUnitTest {
private GroupManager groupManager;
private DefaultRemotingContext remotingContext;
@Before
public void setUp() {
this.groupManager = new GroupManager();
this.remotingContext = new DefaultRemotingContext(new ClientConfig(), new NotifyCommandFactory());
}
@After
public void tearDown() {
this.remotingContext.dispose();
}
@Test
public void testAddConnection() {
final String group1 = "group1";
final String group2 = "group2";
Connection conn = this.createConn();
Assert.assertEquals(0, this.groupManager.getGroupConnectionCount(group1));
this.groupManager.addConnection(group1, conn);
Assert.assertEquals(1, this.groupManager.getGroupConnectionCount(group1));
Assert.assertEquals(1, conn.getGroupSet().size());
// �ظ����
this.groupManager.addConnection(group1, conn);
Assert.assertEquals(1, this.groupManager.getGroupConnectionCount(group1));
Assert.assertEquals(1, conn.getGroupSet().size());
// ��ӵ�������
this.groupManager.addConnection(group2, conn);
Assert.assertEquals(1, this.groupManager.getGroupConnectionCount(group1));
Assert.assertEquals(2, conn.getGroupSet().size());
Assert.assertEquals(1, this.groupManager.getGroupConnectionCount(group2));
// ��Ӹ���
for (int i = 0; i < 10; i++) {
conn = this.createConn();
this.groupManager.addConnection(group1, conn);
}
Assert.assertEquals(11, this.groupManager.getGroupConnectionCount(group1));
}
@Test
public void testRemoveConnection() {
final String group1 = "group1";
final String group2 = "group2";
final Connection conn = this.createConn();
this.groupManager.addConnection(group1, conn);
this.groupManager.addConnection(group2, conn);
Assert.assertEquals(1, this.groupManager.getGroupConnectionCount(group1));
Assert.assertEquals(1, this.groupManager.getGroupConnectionCount(group2));
Assert.assertEquals(2, conn.getGroupSet().size());
this.groupManager.removeConnection(group1, conn);
Assert.assertEquals(0, this.groupManager.getGroupConnectionCount(group1));
Assert.assertEquals(1, this.groupManager.getGroupConnectionCount(group2));
Assert.assertEquals(1, conn.getGroupSet().size());
Assert.assertFalse(conn.getGroupSet().contains(group1));
Assert.assertTrue(conn.getGroupSet().contains(group2));
this.groupManager.removeConnection(group2, conn);
Assert.assertEquals(0, this.groupManager.getGroupConnectionCount(group1));
Assert.assertEquals(0, this.groupManager.getGroupConnectionCount(group2));
Assert.assertEquals(0, conn.getGroupSet().size());
}
@Test
public void testGroupSetAndGetConnectionsByGroup() {
final String group1 = "group1";
final String group2 = "group2";
final Connection conn1 = this.createConn();
final Connection conn2 = this.createConn();
final Connection conn3 = this.createConn();
this.groupManager.addConnection(group1, conn1);
this.groupManager.addConnection(group2, conn1);
this.groupManager.addConnection(group2, conn2);
this.groupManager.addConnection(group2, conn3);
Assert.assertEquals(1, this.groupManager.getGroupConnectionCount(group1));
Assert.assertEquals(3, this.groupManager.getGroupConnectionCount(group2));
Assert.assertEquals(2, conn1.getGroupSet().size());
Assert.assertEquals(1, conn2.getGroupSet().size());
Assert.assertEquals(1, conn3.getGroupSet().size());
final Set<String> groupSet = this.groupManager.getGroupSet();
Assert.assertEquals(2, groupSet.size());
Assert.assertTrue(groupSet.contains(group1));
Assert.assertTrue(groupSet.contains(group2));
final List<Connection> list1 = this.groupManager.getConnectionsByGroup(group1);
Assert.assertEquals(1, list1.size());
Assert.assertTrue(list1.contains(conn1));
final List<Connection> list2 = this.groupManager.getConnectionsByGroup(group2);
Assert.assertEquals(3, list2.size());
Assert.assertTrue(list2.contains(conn1));
Assert.assertTrue(list2.contains(conn2));
Assert.assertTrue(list2.contains(conn3));
}
private Connection createConn() {
final Connection conn = new DefaultConnection(new MockSession(), this.remotingContext);
return conn;
}
}