@Test public void testSetNodeAvailable() { final MemcachedNodesManager cut = createFor( "n1:localhost:11211,n2:localhost:11212", null, null, _mcc ); assertTrue(cut.isNodeAvailable("n1")); assertTrue(cut.isNodeAvailable("n2")); cut.setNodeAvailable("n1", false); assertFalse(cut.isNodeAvailable("n1")); assertTrue(cut.isNodeAvailable("n2")); }
@Test public void testCreateSessionIdShouldOnlyAddNodeIdIfPresent() { assertEquals(createFor( "n1:localhost:11211", null, null, _mcc ).createSessionId("foo"), "foo-n1" ); assertEquals(createFor( "localhost:11211", null, null, _mcc ).createSessionId("foo"), "foo" ); }
protected StorageClient createStorageClient(final MemcachedNodesManager memcachedNodesManager, final String memcachedProtocol, final String username, final String password, final long operationTimeout, final long maxReconnectDelay, final Statistics statistics ) { try { if (memcachedNodesManager.isRedisConfig()) { return new RedisStorageClient(memcachedNodesManager.getMemcachedNodes(), operationTimeout); } final ConnectionType connectionType = ConnectionType.valueOf(memcachedNodesManager.isCouchbaseBucketConfig(), username, password); if (connectionType.isCouchbaseBucketConfig()) { return new MemcachedStorageClient(MemcachedHelper.createCouchbaseClient(memcachedNodesManager, memcachedProtocol, username, password, operationTimeout, maxReconnectDelay, statistics)); } final ConnectionFactory connectionFactory = MemcachedHelper.createConnectionFactory(memcachedNodesManager, connectionType, memcachedProtocol, username, password, operationTimeout, maxReconnectDelay, statistics); return new MemcachedStorageClient(new MemcachedClient(connectionFactory, memcachedNodesManager.getAllMemcachedAddresses())); } catch (final Exception e) { throw new RuntimeException("Could not create memcached client", e); } }
/** * Test for {@link MemcachedNodesManager#getNextPrimaryNodeId(String)}. * @see NodeIdList#getNextNodeId(String) * @see NodeIdListTest#testGetNextNodeId() */ @Test public void testGetNextPrimaryNodeId() { assertNull(createFor( "n1:localhost:11211", null, null, _mcc ).getNextPrimaryNodeId("n1")); assertEquals(createFor( "n1:localhost:11211,n2:localhost:11212", null, null, _mcc ).getNextPrimaryNodeId("n1"), "n2"); }
private MemcachedClient createMemcachedClient( final String memcachedNodes, final InetSocketAddress address ) throws IOException, InterruptedException { final MemcachedNodesManager nodesManager = MemcachedNodesManager.createFor(memcachedNodes, null, null, _storageClientCallback); final ConnectionFactory cf = nodesManager.isEncodeNodeIdInSessionId() ? new SuffixLocatorConnectionFactory( nodesManager, nodesManager.getSessionIdFormat(), Statistics.create(), 1000, 1000 ) : new DefaultConnectionFactory(); final MemcachedClient result = new MemcachedClient( cf, Arrays.asList( address ) ); // Wait a little bit, so that the memcached client can connect and is ready when test starts Thread.sleep( 100 ); return result; }
/** * Set the memcached nodes space or comma separated. * <p> * E.g. <code>n1.localhost:11211 n2.localhost:11212</code> * </p> * <p> * When the memcached nodes are set when this manager is already initialized, * the new configuration will be loaded. * </p> * * @param memcachedNodes * the memcached node definitions, whitespace or comma separated */ public void setMemcachedNodes( final String memcachedNodes ) { if ( _manager.isInitialized() ) { final MemcachedNodesManager config = reloadMemcachedConfig( memcachedNodes, _failoverNodes ); _log.info( "Loaded new memcached node configuration." + "\n- Former config: "+ _memcachedNodes + "\n- New config: " + memcachedNodes + "\n- New node ids: " + config.getPrimaryNodeIds() + "\n- New failover node ids: " + config.getFailoverNodeIds() ); } _memcachedNodes = memcachedNodes; }
"\n- sticky: "+ _sticky + "\n- operation timeout: " + _operationTimeout + "\n- node ids: " + _memcachedNodesManager.getPrimaryNodeIds() + "\n- failover node ids: " + _memcachedNodesManager.getFailoverNodeIds() + "\n- storage key prefix: " + _memcachedNodesManager.getStorageKeyFormat().prefix + "\n- locking mode: " + _lockingMode + " (expiration: " + _lockExpiration + "s)" + "\n--------");
/** * Test for issue #105: Make memcached node optional for single-node setup * http://code.google.com/p/memcached-session-manager/issues/detail?id=105 */ @Test public void testConfigurationFormatMemcachedNodesFeature105() throws LifecycleException { _service.setMemcachedNodes( "127.0.0.1:11211" ); _service.startInternal(new MemcachedStorageClient(_memcachedMock)); assertEquals(_service.getMemcachedNodesManager().getCountNodes(), 1); assertEquals(_service.getMemcachedNodesManager().isEncodeNodeIdInSessionId(), false); assertEquals(_service.getMemcachedNodesManager().isValidForMemcached("123456"), true); _service.shutdown(); _service.setMemcachedNodes( "n1:127.0.0.1:11211" ); _service.startInternal(new MemcachedStorageClient(_memcachedMock)); assertEquals(_service.getMemcachedNodesManager().getCountNodes(), 1); assertEquals(_service.getMemcachedNodesManager().isEncodeNodeIdInSessionId(), true); assertEquals(_service.getMemcachedNodesManager().isValidForMemcached("123456"), false); assertEquals(_service.getMemcachedNodesManager().isValidForMemcached("123456-n1"), true); }
@Test public void testGetSessionIdFormat() { final SessionIdFormat sessionIdFormat = createFor( "n1:localhost:11211", null, null, _mcc ).getSessionIdFormat(); assertNotNull(sessionIdFormat); }
private void initNonStickyLockingMode( @Nonnull final MemcachedNodesManager config ) { if ( _sticky ) { setLockingMode( null, null, false ); return; } if ( _sessionAttributeFilter != null ) { _log.warn( "There's a sessionAttributesFilter configured ('" + _sessionAttributeFilter + "')," + " all other session attributes will be lost after the request due to non-sticky configuration!" ); } Pattern uriPattern = null; LockingMode lockingMode = null; if ( _lockingMode != null ) { if ( _lockingMode.startsWith( "uriPattern:" ) ) { lockingMode = LockingMode.URI_PATTERN; uriPattern = Pattern.compile( _lockingMode.substring( "uriPattern:".length() ) ); } else { lockingMode = LockingMode.valueOf( _lockingMode.toUpperCase() ); } } if ( lockingMode == null ) { lockingMode = LockingMode.NONE; } final boolean storeSecondaryBackup = config.getCountNodes() > 1 && !config.isCouchbaseBucketConfig(); setLockingMode( lockingMode, uriPattern, storeSecondaryBackup ); }
_storageKeyFormat = storageKeyFormat; _encodeNodeIdInSessionId = !((getCountNodes() <= 1 || isCouchbaseConfig(memcachedNodes)) && _primaryNodeIds.isEmpty()); _nodeIdService = new NodeIdService( createNodeAvailabilityCache( getCountNodes(), NODE_AVAILABILITY_CACHE_TTL, storageClientCallback), primaryNodeIds, failoverNodeIds );
@Test public void testIsCouchbaseBucketConfig() { assertTrue(createFor("http://10.10.0.1:8091/pools", null, null, _mcc ).isCouchbaseBucketConfig()); assertTrue(createFor("http://10.10.0.1:8091/pools,http://10.10.0.2:8091/pools", null, null, _mcc ).isCouchbaseBucketConfig()); }
@Test( dataProvider = "testgGetAllMemcachedAddressesDataProvider" ) public void testGetAllMemcachedAddresses(final String memcachedNodes, final String failoverNodes, final Collection<InetSocketAddress> expectedSocketAddresses) { final MemcachedNodesManager result = createFor( memcachedNodes, failoverNodes, null, _mcc ); assertEquals(result.getAllMemcachedAddresses(), expectedSocketAddresses); }
@Test( dataProvider = "nodesAndFailoverNodesDataProvider" ) public void testFailoverNodes(final String memcachedNodes, final String failoverNodes, final List<String> expectedFailoverNodeIds) { final MemcachedNodesManager result = createFor( memcachedNodes, failoverNodes, null, _mcc ); assertNotNull(result); assertEquals(result.getFailoverNodeIds(), expectedFailoverNodeIds); }
@Test( dataProvider = "nodesAndPrimaryNodesDataProvider" ) public void testPrimaryNodes(final String memcachedNodes, final String failoverNodes, final NodeIdList expectedPrimaryNodeIds) { final MemcachedNodesManager result = createFor( memcachedNodes, failoverNodes, null, _mcc ); assertNotNull(result); assertEquals(result.getPrimaryNodeIds(), expectedPrimaryNodeIds); }
@Test( dataProvider = "nodesAndExpectedCountDataProvider" ) public void testCountNodes( final String memcachedNodes, final int expectedCount ) { final MemcachedNodesManager result = createFor( memcachedNodes, null, null, _mcc ); assertNotNull(result); assertEquals(result.getCountNodes(), expectedCount); }
@Test( dataProvider = "nodesAndExpectedEncodedInSessionIdDataProvider" ) public void testIsEncodeNodeIdInSessionId( final String memcachedNodes, final String failoverNodes, final boolean expectedIsEncodeNodeIdInSessionId ) { final MemcachedNodesManager result = createFor( memcachedNodes, null, null, _mcc ); assertNotNull(result); assertEquals(result.isEncodeNodeIdInSessionId(), expectedIsEncodeNodeIdInSessionId); }
@Test public void testGetCouchbaseBucketURIs() throws URISyntaxException { assertEquals(createFor("http://10.10.0.1:8091/pools", null, null, _mcc ).getCouchbaseBucketURIs(), Arrays.asList(new URI("http://10.10.0.1:8091/pools"))); assertEquals(createFor("http://10.10.0.1:8091/pools,http://10.10.0.2:8091/pools", null, null, _mcc ).getCouchbaseBucketURIs(), Arrays.asList(new URI("http://10.10.0.1:8091/pools"), new URI("http://10.10.0.2:8091/pools"))); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testParseWithEmptyStringShouldThrowException() { createFor("", null, null, _mcc); }