Repository: incubator-wave Updated Branches: refs/heads/master 1b8ce7c1f -> 803697606
http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/wave/util/settings/SettingsBinder.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/wave/util/settings/SettingsBinder.java b/src/org/waveprotocol/wave/util/settings/SettingsBinder.java deleted file mode 100644 index 0316520..0000000 --- a/src/org/waveprotocol/wave/util/settings/SettingsBinder.java +++ /dev/null @@ -1,198 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 org.waveprotocol.wave.util.settings; - -import com.google.common.base.Joiner; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.inject.AbstractModule; -import com.google.inject.Module; -import com.google.inject.TypeLiteral; -import com.google.inject.name.Names; - -import org.apache.commons.configuration.CompositeConfiguration; -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.commons.configuration.SystemConfiguration; - -import java.lang.reflect.Field; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -/** - * A property file parsing system that converts a given - * settings class into a Guice module with injectable - * @Named parameters. - * - * Originally based on some CLI work by [email protected] (Anthony Baxter). - * Refactored by [email protected] (Tad Glines) to use Commons Configuration and add support for - * List<String>. - */ -public class SettingsBinder { - - /** - * Used to validate that a type is supported. Some types may have generic parameters that need - * to be checked. - */ - private interface SettingTypeValidator { - boolean check(Type type); - } - - private static final Map<Type, SettingTypeValidator> supportedSettingTypes; - - /** - * This default validator just returns true. - */ - private static final SettingTypeValidator DEFAULT_TYPE_VALIDATOR = new SettingTypeValidator() { - @Override - public boolean check(Type type) { - return true; - } - }; - - /** - * This validator checks to make sure the {@link List}'s generic parameter is also supported. - */ - private static final SettingTypeValidator LIST_TYPE_VALIDATOR = new SettingTypeValidator() { - @Override - public boolean check(Type type) { - if (type instanceof ParameterizedType) { - Type[] args = ((ParameterizedType)type).getActualTypeArguments(); - if (args.length == 1) { - // At the moment only List<String> is supported. - if (args[0] == String.class) { - return true; - } - } - } - return false; - } - }; - - static { - ImmutableMap.Builder<Type, SettingTypeValidator> builder = ImmutableMap.builder(); - builder.put(int.class, DEFAULT_TYPE_VALIDATOR); - builder.put(boolean.class, DEFAULT_TYPE_VALIDATOR); - builder.put(String.class, DEFAULT_TYPE_VALIDATOR); - builder.put(List.class, LIST_TYPE_VALIDATOR); - supportedSettingTypes = builder.build(); - } - - /** - * Bind configuration parameters into Guice Module. - * - * @return a Guice module configured with setting support. - * @throws ConfigurationException on configuration error - */ - public static Module bindSettings(String propertiesFileKey, Class<?>... settingsArg) - throws ConfigurationException { - final CompositeConfiguration config = new CompositeConfiguration(); - config.addConfiguration(new SystemConfiguration()); - String propertyFile = config.getString(propertiesFileKey); - if (propertyFile != null) { - config.addConfiguration(new PropertiesConfiguration(propertyFile)); - } - - List<Field> fields = new ArrayList<Field>(); - for (Class<?> settings : settingsArg) { - fields.addAll(Arrays.asList(settings.getDeclaredFields())); - } - - // Reflect on settings class and absorb settings - final Map<Setting, Field> settings = new LinkedHashMap<Setting, Field>(); - for (Field field : fields) { - if (!field.isAnnotationPresent(Setting.class)) { - continue; - } - - // Validate target type - SettingTypeValidator typeHelper = supportedSettingTypes.get(field.getType()); - if (typeHelper == null || !typeHelper.check(field.getGenericType())) { - throw new IllegalArgumentException(field.getType() - + " is not one of the supported setting types"); - } - - Setting setting = field.getAnnotation(Setting.class); - settings.put(setting, field); - } - - // Now validate them - List<String> missingProperties = new ArrayList<String>(); - for (Setting setting : settings.keySet()) { - if (setting.defaultValue().isEmpty()) { - if (!config.containsKey(setting.name())) { - missingProperties.add(setting.name()); - } - } - } - if (missingProperties.size() > 0) { - StringBuilder error = new StringBuilder(); - error.append("The following required properties are missing from the server configuration: "); - error.append(Joiner.on(", ").join(missingProperties)); - throw new ConfigurationException(error.toString()); - } - - // bundle everything up in an injectable guice module - return new AbstractModule() { - - @Override - protected void configure() { - // We must iterate the settings a third time when binding. - // Note: do not collapse these loops as that will damage - // early error detection. The runtime is still O(n) in setting count. - for (Map.Entry<Setting, Field> entry : settings.entrySet()) { - Class<?> type = entry.getValue().getType(); - Setting setting = entry.getKey(); - - if (int.class.equals(type)) { - Integer defaultValue = null; - if (!setting.defaultValue().isEmpty()) { - defaultValue = Integer.parseInt(setting.defaultValue()); - } - bindConstant().annotatedWith(Names.named(setting.name())) - .to(config.getInteger(setting.name(), defaultValue)); - } else if (boolean.class.equals(type)) { - Boolean defaultValue = null; - if (!setting.defaultValue().isEmpty()) { - defaultValue = Boolean.parseBoolean(setting.defaultValue()); - } - bindConstant().annotatedWith(Names.named(setting.name())) - .to(config.getBoolean(setting.name(), defaultValue)); - } else if (String.class.equals(type)) { - bindConstant().annotatedWith(Names.named(setting.name())) - .to(config.getString(setting.name(), setting.defaultValue())); - } else { - String[] value = config.getStringArray(setting.name()); - if (value.length == 0 && !setting.defaultValue().isEmpty()) { - value = setting.defaultValue().split(","); - } - bind(new TypeLiteral<List<String>>() {}).annotatedWith(Names.named(setting.name())) - .toInstance(ImmutableList.copyOf(value)); - } - } - } - }; - } -} http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/box/server/persistence/file/AccountStoreTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/box/server/persistence/file/AccountStoreTest.java b/test/org/waveprotocol/box/server/persistence/file/AccountStoreTest.java index 26b3d8d..c1bd5f0 100644 --- a/test/org/waveprotocol/box/server/persistence/file/AccountStoreTest.java +++ b/test/org/waveprotocol/box/server/persistence/file/AccountStoreTest.java @@ -19,6 +19,7 @@ package org.waveprotocol.box.server.persistence.file; +import com.typesafe.config.ConfigFactory; import org.waveprotocol.box.server.persistence.AccountStore; import org.waveprotocol.box.server.persistence.AccountStoreTestBase; @@ -40,7 +41,8 @@ public class AccountStoreTest extends AccountStoreTestBase { @Override protected AccountStore newAccountStore() { - return new FileAccountStore(path.getAbsolutePath()); + return new FileAccountStore( + ConfigFactory.parseString("core.account_store_directory : " + path.getAbsolutePath())); } @Override http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/box/server/persistence/file/AttachmentStoreTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/box/server/persistence/file/AttachmentStoreTest.java b/test/org/waveprotocol/box/server/persistence/file/AttachmentStoreTest.java index 023d3c9..6ace3ee 100644 --- a/test/org/waveprotocol/box/server/persistence/file/AttachmentStoreTest.java +++ b/test/org/waveprotocol/box/server/persistence/file/AttachmentStoreTest.java @@ -19,6 +19,7 @@ package org.waveprotocol.box.server.persistence.file; +import com.typesafe.config.ConfigFactory; import org.waveprotocol.box.server.persistence.AttachmentStore; import org.waveprotocol.box.server.persistence.AttachmentStoreTestBase; @@ -39,7 +40,8 @@ public class AttachmentStoreTest extends AttachmentStoreTestBase { @Override protected AttachmentStore newAttachmentStore() { - return new FileAttachmentStore(path.getAbsolutePath()); + return new FileAttachmentStore( + ConfigFactory.parseString("core.attachment_store_directory : " + path.getAbsolutePath())); } @Override http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/box/server/persistence/file/CertPathStoreTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/box/server/persistence/file/CertPathStoreTest.java b/test/org/waveprotocol/box/server/persistence/file/CertPathStoreTest.java index 36f67f2..0065d80 100644 --- a/test/org/waveprotocol/box/server/persistence/file/CertPathStoreTest.java +++ b/test/org/waveprotocol/box/server/persistence/file/CertPathStoreTest.java @@ -19,6 +19,7 @@ package org.waveprotocol.box.server.persistence.file; +import com.typesafe.config.ConfigFactory; import org.waveprotocol.box.server.persistence.CertPathStoreTestBase; import org.waveprotocol.wave.crypto.CertPathStore; @@ -45,7 +46,7 @@ public class CertPathStoreTest extends CertPathStoreTestBase { @Override protected CertPathStore newCertPathStore() { - return new FileSignerInfoStore(path.getAbsolutePath()); + return new FileSignerInfoStore(ConfigFactory.parseString("core.signer_info_store_directory : " + path.getAbsolutePath())); } @Override http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/box/server/persistence/file/DeltaStoreTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/box/server/persistence/file/DeltaStoreTest.java b/test/org/waveprotocol/box/server/persistence/file/DeltaStoreTest.java index 6c01f70..1bc18ee 100644 --- a/test/org/waveprotocol/box/server/persistence/file/DeltaStoreTest.java +++ b/test/org/waveprotocol/box/server/persistence/file/DeltaStoreTest.java @@ -21,6 +21,7 @@ package org.waveprotocol.box.server.persistence.file; import com.google.common.collect.ImmutableList; +import com.typesafe.config.ConfigFactory; import org.waveprotocol.box.server.persistence.DeltaStoreTestBase; import org.waveprotocol.box.server.waveserver.DeltaStore; import org.waveprotocol.box.server.waveserver.WaveletDeltaRecord; @@ -54,7 +55,8 @@ public class DeltaStoreTest extends DeltaStoreTestBase { @Override protected DeltaStore newDeltaStore() { - return new FileDeltaStore(path.getAbsolutePath()); + return new FileDeltaStore(ConfigFactory.parseString("core.delta_store_directory : " + path + .getAbsolutePath())); } @Override http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/box/server/robots/agent/AbstractRobotAgentTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/box/server/robots/agent/AbstractRobotAgentTest.java b/test/org/waveprotocol/box/server/robots/agent/AbstractRobotAgentTest.java index 5f78d04..6794276 100644 --- a/test/org/waveprotocol/box/server/robots/agent/AbstractRobotAgentTest.java +++ b/test/org/waveprotocol/box/server/robots/agent/AbstractRobotAgentTest.java @@ -46,7 +46,7 @@ public class AbstractRobotAgentTest extends TestCase { public FakeRobotAgent(String waveDomain, TokenGenerator tokenGenerator, ServerFrontendAddressHolder frontendAddressHolder, AccountStore accountStore, RobotRegistrar registrar, Boolean sslEnabled) { - super(waveDomain, tokenGenerator, frontendAddressHolder, accountStore, registrar, sslEnabled); + super(waveDomain, frontendAddressHolder, accountStore, registrar, sslEnabled); } @Override http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/box/server/rpc/AuthenticationServletTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/box/server/rpc/AuthenticationServletTest.java b/test/org/waveprotocol/box/server/rpc/AuthenticationServletTest.java index 2e39d2d..89c705e 100644 --- a/test/org/waveprotocol/box/server/rpc/AuthenticationServletTest.java +++ b/test/org/waveprotocol/box/server/rpc/AuthenticationServletTest.java @@ -26,6 +26,9 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import com.google.common.collect.ImmutableMap; +import com.typesafe.config.Config; +import com.typesafe.config.ConfigFactory; import junit.framework.TestCase; import org.mockito.Mock; @@ -77,8 +80,16 @@ public class AuthenticationServletTest extends TestCase { new HumanAccountDataImpl(USER, new PasswordDigest("password".toCharArray())); store.putAccount(account); + Config config = ConfigFactory.parseMap(ImmutableMap.<String, Object>of( + "administration.disable_registration", false, + "administration.analytics_account", "UA-someid", + "security.enable_clientauth", false, + "security.clientauth_cert_domain", "", + "administration.disable_loginpage", false) + ); + servlet = new AuthenticationServlet(store, AuthTestUtil.makeConfiguration(), - manager, "examPLe.com", false, "", false, false, welcomeBot, "UA-someid"); + manager, "examPLe.com", config, welcomeBot); AccountStoreHolder.init(store, "eXaMple.com"); } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/box/server/rpc/RpcTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/box/server/rpc/RpcTest.java b/test/org/waveprotocol/box/server/rpc/RpcTest.java index 8af1078..ffc887e 100644 --- a/test/org/waveprotocol/box/server/rpc/RpcTest.java +++ b/test/org/waveprotocol/box/server/rpc/RpcTest.java @@ -24,29 +24,20 @@ import com.google.common.util.concurrent.MoreExecutors; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; -import com.google.inject.Key; -import com.google.inject.name.Names; import com.google.protobuf.Descriptors; import com.google.protobuf.RpcCallback; import com.google.protobuf.RpcController; - +import com.typesafe.config.Config; +import com.typesafe.config.ConfigFactory; import junit.framework.TestCase; - import org.mockito.Mockito; import org.waveprotocol.box.common.comms.WaveClientRpc; -import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolAuthenticate; -import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolAuthenticationResult; -import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolOpenRequest; -import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolSubmitRequest; -import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolSubmitResponse; -import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolWaveletUpdate; -import org.waveprotocol.box.server.CoreSettings; +import org.waveprotocol.box.common.comms.WaveClientRpc.*; import org.waveprotocol.box.server.authentication.SessionManager; import java.io.IOException; import java.net.InetSocketAddress; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -77,12 +68,14 @@ public class RpcTest extends TestCase { new ServerRpcProvider(new InetSocketAddress[] {new InetSocketAddress("localhost", 0)}, new String[] {"./war"}, sessionManager, null, null, false, null, null, MoreExecutors.sameThreadExecutor()); + final Map<String, Object> props = new HashMap<>(); + props.put("network.websocket_max_idle_time", 0); + props.put("network.websocket_max_message_size", 2); Injector injector = Guice.createInjector(new AbstractModule() { @Override protected void configure() { bind(ServerRpcProvider.class).toInstance(server); - bind(Key.get(Integer.class, Names.named(CoreSettings.WEBSOCKET_MAX_IDLE_TIME))).toInstance(0); - bind(Key.get(Integer.class, Names.named(CoreSettings.WEBSOCKET_MAX_MESSAGE_SIZE))).toInstance(2); + bind(Config.class).toInstance(ConfigFactory.parseMap(props)); } }); server.startWebSocketServer(injector); @@ -235,7 +228,7 @@ public class RpcTest extends TestCase { // Wait for a response, and assert that is a complete failure. :-) responseLatch.await(TIMEOUT_SECONDS, TimeUnit.SECONDS); - assertEquals(Arrays.asList((ProtocolWaveletUpdate) null), responses); + assertEquals(Collections.singletonList((ProtocolWaveletUpdate) null), responses); assertTrue(controller.failed()); assertEquals(ERROR_TEXT, controller.errorText()); } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/box/server/rpc/UserRegistrationServletTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/box/server/rpc/UserRegistrationServletTest.java b/test/org/waveprotocol/box/server/rpc/UserRegistrationServletTest.java index bd83db8..84f1ac3 100644 --- a/test/org/waveprotocol/box/server/rpc/UserRegistrationServletTest.java +++ b/test/org/waveprotocol/box/server/rpc/UserRegistrationServletTest.java @@ -26,6 +26,9 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import com.google.common.collect.ImmutableMap; +import com.typesafe.config.Config; +import com.typesafe.config.ConfigFactory; import junit.framework.TestCase; import org.mockito.Mock; @@ -129,10 +132,19 @@ public class UserRegistrationServletTest extends TestCase { HttpServletRequest req, HttpServletResponse resp, String address, String password, boolean disabledRegistration) throws IOException { + Config config1 = ConfigFactory.parseMap(ImmutableMap.<String, Object>of( + "administration.disable_registration", false, + "administration.analytics_account", "UA-someid") + ); UserRegistrationServlet enabledServlet = - new UserRegistrationServlet(store, "example.com", welcomeBot, false, "UA-someid"); + new UserRegistrationServlet(store, "example.com", config1, welcomeBot); + + Config config2 = ConfigFactory.parseMap(ImmutableMap.<String, Object>of( + "administration.disable_registration", true, + "administration.analytics_account", "UA-someid") + ); UserRegistrationServlet disabledServlet = - new UserRegistrationServlet(store, "example.com", welcomeBot, true, "UA-someid"); + new UserRegistrationServlet(store, "example.com", config2, welcomeBot); when(req.getParameter("address")).thenReturn(address); when(req.getParameter("password")).thenReturn(password); http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/box/server/waveserver/CertificateManagerImplTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/box/server/waveserver/CertificateManagerImplTest.java b/test/org/waveprotocol/box/server/waveserver/CertificateManagerImplTest.java index 75ac795..625a66e 100644 --- a/test/org/waveprotocol/box/server/waveserver/CertificateManagerImplTest.java +++ b/test/org/waveprotocol/box/server/waveserver/CertificateManagerImplTest.java @@ -29,6 +29,8 @@ import static org.waveprotocol.box.server.waveserver.Ticker.EASY_TICKS; import com.google.common.collect.ImmutableList; import com.google.protobuf.ByteString; +import com.typesafe.config.Config; +import com.typesafe.config.ConfigFactory; import junit.framework.TestCase; import org.waveprotocol.box.server.common.CoreWaveletOperationSerializer; @@ -83,6 +85,7 @@ public class CertificateManagerImplTest extends TestCase { private CertPathStore store; private CertificateManager manager; private Ticker ticker; + private Config config; /* * These belong to the example.com domain. @@ -93,7 +96,8 @@ public class CertificateManagerImplTest extends TestCase { protected void setUp() throws Exception { super.setUp(); store = new MemoryStore(); - manager = new CertificateManagerImpl(false, getSigner(), getVerifier(store, true), store); + config = ConfigFactory.parseString("federation.waveserver_disable_verification : " + false); + manager = new CertificateManagerImpl(config, getSigner(), getVerifier(store, true), store); ticker = new Ticker(); } @@ -121,7 +125,7 @@ public class CertificateManagerImplTest extends TestCase { .setAuthor("[email protected]") .build(); ByteStringMessage<ProtocolWaveletDelta> canonicalDelta = ByteStringMessage.serializeMessage(delta); - manager = new CertificateManagerImpl(false, getSigner(), getVerifier(store, false), store); + manager = new CertificateManagerImpl(config, getSigner(), getVerifier(store, false), store); ProtocolSignedDelta signedDelta = manager.signDelta(canonicalDelta); try { @@ -154,7 +158,7 @@ public class CertificateManagerImplTest extends TestCase { } public void testRealSignature() throws Exception { - manager = new CertificateManagerImpl(false, getSigner(), getRealVerifier(store), store); + manager = new CertificateManagerImpl(config, getSigner(), getRealVerifier(store), store); manager.storeSignerInfo(Certificates.getRealSignerInfo().toProtoBuf()); ByteStringMessage<ProtocolWaveletDelta> compare = manager.verifyDelta(getFakeSignedDelta()); assertEquals(compare, getFakeDelta()); http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/box/server/waveserver/LucenePerUserWaveViewProviderTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/box/server/waveserver/LucenePerUserWaveViewProviderTest.java b/test/org/waveprotocol/box/server/waveserver/LucenePerUserWaveViewProviderTest.java index 078203c..96cb819 100644 --- a/test/org/waveprotocol/box/server/waveserver/LucenePerUserWaveViewProviderTest.java +++ b/test/org/waveprotocol/box/server/waveserver/LucenePerUserWaveViewProviderTest.java @@ -58,7 +58,7 @@ public class LucenePerUserWaveViewProviderTest extends PerUserWaveViewProviderTe @Override protected PerUserWaveViewHandler createPerUserWaveViewHandler() { handler = - new LucenePerUserWaveViewHandlerImpl(directory, waveletProvider, textCollator, DOMAIN, + new LucenePerUserWaveViewHandlerImpl(directory, waveletProvider, DOMAIN, Executors.newCachedThreadPool()); return handler; } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/box/server/waveserver/SimpleSearchProviderImplTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/box/server/waveserver/SimpleSearchProviderImplTest.java b/test/org/waveprotocol/box/server/waveserver/SimpleSearchProviderImplTest.java index d966305..1b5e5a1 100644 --- a/test/org/waveprotocol/box/server/waveserver/SimpleSearchProviderImplTest.java +++ b/test/org/waveprotocol/box/server/waveserver/SimpleSearchProviderImplTest.java @@ -137,7 +137,7 @@ public class SimpleSearchProviderImplTest extends TestCase { } private ParticipantId computeAuthor(SearchResult.Digest digest) { - ParticipantId author = null; + ParticipantId author; author = ParticipantId.ofUnsafe(digest.getParticipants().get(0)); assert author != null : "Cannot find author for the wave: " + digest.getWaveId(); return author; @@ -165,8 +165,6 @@ public class SimpleSearchProviderImplTest extends TestCase { @Mock private PerUserWaveViewProvider waveViewProvider; private SearchProvider searchProvider; - private ConversationUtil conversationUtil; - private WaveDigester digester; private WaveMap waveMap; @Override @@ -181,8 +179,8 @@ public class SimpleSearchProviderImplTest extends TestCase { when(waveViewProvider.retrievePerUserWaveView(USER2)).thenReturn(wavesViewUser2); when(waveViewProvider.retrievePerUserWaveView(SHARED_USER)).thenReturn(wavesViewUser3); - conversationUtil = new ConversationUtil(idGenerator); - digester = new WaveDigester(conversationUtil); + ConversationUtil conversationUtil = new ConversationUtil(idGenerator); + WaveDigester digester = new WaveDigester(conversationUtil); final DeltaStore deltaStore = new MemoryDeltaStore(); final Executor persistExecutor = MoreExecutors.sameThreadExecutor(); @@ -206,8 +204,9 @@ public class SimpleSearchProviderImplTest extends TestCase { }; waveMap = - new WaveMap(waveletStore, notifiee, notifiee, localWaveletContainerFactory, + new WaveMap(waveletStore, notifiee, localWaveletContainerFactory, remoteWaveletContainerFactory, DOMAIN, lookupExecutor); + searchProvider = new SimpleSearchProviderImpl(DOMAIN, digester, waveMap, waveViewProvider); } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/box/server/waveserver/WaveMapTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/box/server/waveserver/WaveMapTest.java b/test/org/waveprotocol/box/server/waveserver/WaveMapTest.java index e161490..579dc7c 100644 --- a/test/org/waveprotocol/box/server/waveserver/WaveMapTest.java +++ b/test/org/waveprotocol/box/server/waveserver/WaveMapTest.java @@ -84,7 +84,7 @@ public class WaveMapTest extends TestCase { waveletStore = mock(DeltaAndSnapshotStore.class); waveMap = - new WaveMap(waveletStore, notifiee, notifiee, localWaveletContainerFactory, + new WaveMap(waveletStore, notifiee, localWaveletContainerFactory, remoteWaveletContainerFactory, "example.com", storageContinuationExecutor); } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/box/server/waveserver/WaveServerTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/box/server/waveserver/WaveServerTest.java b/test/org/waveprotocol/box/server/waveserver/WaveServerTest.java index 1da4f7b..8291af3 100644 --- a/test/org/waveprotocol/box/server/waveserver/WaveServerTest.java +++ b/test/org/waveprotocol/box/server/waveserver/WaveServerTest.java @@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.util.concurrent.MoreExecutors; +import com.typesafe.config.Config; import junit.framework.TestCase; import org.mockito.Matchers; @@ -83,6 +84,7 @@ public class WaveServerTest extends TestCase { @Mock private WaveletFederationProvider federationRemote; @Mock private WaveletNotificationDispatcher notifiee; @Mock private RemoteWaveletContainer.Factory remoteWaveletContainerFactory; + @Mock private Config config; private CertificateManager certificateManager; private DeltaAndSnapshotStore waveletStore; @@ -98,7 +100,8 @@ public class WaveServerTest extends TestCase { when(localSigner.sign(Matchers.<ByteStringMessage<ProtocolWaveletDelta>>any())) .thenReturn(ImmutableList.<ProtocolSignature>of()); - certificateManager = new CertificateManagerImpl(true, localSigner, null, null); + when(config.getBoolean("federation.waveserver_disable_verification")).thenReturn(true); + certificateManager = new CertificateManagerImpl(config, localSigner, null, null); final DeltaStore deltaStore = new MemoryDeltaStore(); final Executor waveletLoadExecutor = MoreExecutors.sameThreadExecutor(); final Executor persistExecutor = MoreExecutors.sameThreadExecutor(); @@ -116,7 +119,7 @@ public class WaveServerTest extends TestCase { waveletStore = new DeltaStoreBasedSnapshotStore(deltaStore); Executor lookupExecutor = MoreExecutors.sameThreadExecutor(); waveMap = - new WaveMap(waveletStore, notifiee, notifiee, localWaveletContainerFactory, + new WaveMap(waveletStore, notifiee, localWaveletContainerFactory, remoteWaveletContainerFactory, "example.com", lookupExecutor); waveServer = new WaveServerImpl(MoreExecutors.sameThreadExecutor(), certificateManager, http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/wave/federation/xmpp/MockDisco.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/wave/federation/xmpp/MockDisco.java b/test/org/waveprotocol/wave/federation/xmpp/MockDisco.java index 6a0193e..5824cc8 100644 --- a/test/org/waveprotocol/wave/federation/xmpp/MockDisco.java +++ b/test/org/waveprotocol/wave/federation/xmpp/MockDisco.java @@ -23,12 +23,17 @@ import com.google.common.base.Function; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.google.common.collect.MapMaker; +import com.typesafe.config.Config; +import com.typesafe.config.ConfigFactory; +import java.util.HashMap; import java.util.Map; import java.util.Queue; import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -44,9 +49,24 @@ public class MockDisco extends XmppDisco { private static final int FAIL_EXPIRY_SECS = 5 * 60; private static final int SUCCESS_EXPIRY_SECS = 2 * 60 * 60; + private static final int DISCO_EXPIRY_HOURS = 6; - MockDisco(String serverName) { - super(serverName, FAIL_EXPIRY_SECS, SUCCESS_EXPIRY_SECS); + public static final Config config; + + static { + Map<String, Object> props = new HashMap<>(); + props.put("federation.xmpp_server_description", "Wave in a Box"); + props.put("federation.disco_info_category", "collaboration"); + props.put("federation.disco_info_type", "apache-wave"); + props.put("federation.xmpp_disco_failed_expiry", FAIL_EXPIRY_SECS + "s"); + props.put("federation.xmpp_disco_successful_expiry", SUCCESS_EXPIRY_SECS + "s"); + props.put("federation.disco_expiration", DISCO_EXPIRY_HOURS + "h"); + + config = ConfigFactory.parseMap(props); + } + + MockDisco() { + super(config); } public static class PendingMockDisco { http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/wave/federation/xmpp/RoundTripTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/wave/federation/xmpp/RoundTripTest.java b/test/org/waveprotocol/wave/federation/xmpp/RoundTripTest.java index e7879c0..fc928a6 100644 --- a/test/org/waveprotocol/wave/federation/xmpp/RoundTripTest.java +++ b/test/org/waveprotocol/wave/federation/xmpp/RoundTripTest.java @@ -28,6 +28,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; +import com.typesafe.config.ConfigFactory; import junit.framework.TestCase; import org.mockito.ArgumentCaptor; @@ -42,6 +43,8 @@ import org.waveprotocol.wave.federation.FederationErrorProto.FederationError; import org.waveprotocol.wave.federation.FederationErrors; import org.waveprotocol.wave.federation.xmpp.MockOutgoingPacketTransport.Router; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -61,8 +64,6 @@ public class RoundTripTest extends TestCase { private static final String SERVER2_DOMAIN = "acmewave.com"; private static final int PACKET_TIMEOUT = 10; - private static final int DISCO_FAIL_EXPIRY_SECS = 5 * 60; - private static final int DISCO_SUCCESS_EXPIRY_SECS = 2 * 60 * 60; private static class ServerInstances { final String jid; @@ -81,7 +82,12 @@ public class RoundTripTest extends TestCase { // 'Real' instantiated classes! jid = "wave." + domain; transport = new MockOutgoingPacketTransport(router); - manager = new XmppManager(host, remote, disco, transport, jid); + + final Map<String, Object> props = new HashMap<>(); + props.put("federation.xmpp_disco_successful_expiry", "6s"); + props.put("federation.xmpp_jid", jid); + manager = new XmppManager( + host, remote, disco, transport, ConfigFactory.parseMap(props)); // Verify manager callback. verify(host).setManager(eq(manager)); @@ -184,8 +190,7 @@ public class RoundTripTest extends TestCase { // that will never be processed. ArgumentCaptor<PacketCallback> server2Callback = ArgumentCaptor.forClass(PacketCallback.class); verify(server2.disco).processDiscoItemsGet(eq(packet), server2Callback.capture()); - XmppDisco realDisco = new XmppDisco("Some Unchecked Wave Server", DISCO_FAIL_EXPIRY_SECS, - DISCO_SUCCESS_EXPIRY_SECS); + XmppDisco realDisco = new XmppDisco(MockDisco.config); realDisco.setManager(server2.manager); realDisco.processDiscoItemsGet(packet, server2Callback.getValue()); http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/wave/federation/xmpp/XmppDiscoTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/wave/federation/xmpp/XmppDiscoTest.java b/test/org/waveprotocol/wave/federation/xmpp/XmppDiscoTest.java index 9be9588..ef42b67 100644 --- a/test/org/waveprotocol/wave/federation/xmpp/XmppDiscoTest.java +++ b/test/org/waveprotocol/wave/federation/xmpp/XmppDiscoTest.java @@ -29,6 +29,7 @@ import static org.mockito.Mockito.verifyZeroInteractions; import com.google.common.collect.Lists; +import com.typesafe.config.ConfigFactory; import junit.framework.TestCase; import org.dom4j.Element; @@ -37,7 +38,9 @@ import org.xmpp.packet.Packet; import org.xmpp.packet.PacketError; import org.joda.time.DateTimeUtils; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicLong; @@ -55,7 +58,7 @@ public class XmppDiscoTest extends TestCase { private static final String DISCO_ITEMS_ID = "disco-items"; private static final String DISCO_INFO_ID = "disco-info"; - private static final String SERVER_DESCRIPTION = "Google Wave Server"; + private static final String SERVER_DESCRIPTION = "Wave in a Box"; // The following JID is intentionally non-Wave. private static final String REMOTE_PUBSUB_JID = "pubsub." + REMOTE_DOMAIN; @@ -88,7 +91,7 @@ public class XmppDiscoTest extends TestCase { "\n<iq type=\"result\" id=\""+ DISCO_INFO_ID + "\" from=\"" + LOCAL_JID + "\" " + "to=\"" + REMOTE_JID + "\">\n" + " <query xmlns=\"http://jabber.org/protocol/disco#info\">\n" - + " <identity category=\"collaboration\" type=\"google-wave\" " + + " <identity category=\"collaboration\" type=\"apache-wave\" " + "name=\"" + SERVER_DESCRIPTION + "\"/>\n" + " <feature var=\"http://waveprotocol.org/protocol/0.2/waveserver\"/>\n" + " </query>\n" @@ -116,10 +119,12 @@ public class XmppDiscoTest extends TestCase { @Override protected void setUp() throws Exception { super.setUp(); - disco = new XmppDisco(SERVER_DESCRIPTION, DISCO_FAIL_EXPIRY_SECS, DISCO_SUCCESS_EXPIRY_SECS); + disco = new XmppDisco(MockDisco.config); transport = new MockOutgoingPacketTransport(); + final Map<String, Object> props = new HashMap<>(); + props.put("federation.xmpp_jid", LOCAL_JID); manager = new XmppManager(mock(XmppFederationHost.class), mock(XmppFederationRemote.class), - disco, transport, LOCAL_JID); + disco, transport, ConfigFactory.parseMap(props).withFallback(MockDisco.config)); disco.setManager(manager); discoCallback = createMockCallback(); @@ -545,8 +550,8 @@ public class XmppDiscoTest extends TestCase { if (forWaveJID) { response.setFrom(REMOTE_JID); query.addElement("identity") - .addAttribute("category", XmppDisco.DISCO_INFO_CATEGORY) - .addAttribute("type", XmppDisco.DISCO_INFO_TYPE) + .addAttribute("category", MockDisco.config.getString("federation.disco_info_category")) + .addAttribute("type", MockDisco.config.getString("federation.disco_info_type")) .addAttribute("name", SERVER_DESCRIPTION); query.addElement("feature") .addAttribute("var", XmppNamespace.NAMESPACE_WAVE_SERVER); @@ -614,12 +619,15 @@ public class XmppDiscoTest extends TestCase { */ private IQ createDiscoRequest(String namespace) { IQ request = new IQ(IQ.Type.get); - if (namespace.equals(XmppNamespace.NAMESPACE_DISCO_ITEMS)) { - request.setID(DISCO_ITEMS_ID); - } else if (namespace.equals(XmppNamespace.NAMESPACE_DISCO_INFO)) { - request.setID(DISCO_INFO_ID); - } else { - throw new IllegalArgumentException(); + switch (namespace) { + case XmppNamespace.NAMESPACE_DISCO_ITEMS: + request.setID(DISCO_ITEMS_ID); + break; + case XmppNamespace.NAMESPACE_DISCO_INFO: + request.setID(DISCO_INFO_ID); + break; + default: + throw new IllegalArgumentException(); } request.setTo(LOCAL_JID); request.setFrom(REMOTE_JID); http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/wave/federation/xmpp/XmppFederationHostForDomainTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/wave/federation/xmpp/XmppFederationHostForDomainTest.java b/test/org/waveprotocol/wave/federation/xmpp/XmppFederationHostForDomainTest.java index 6994484..499b692 100644 --- a/test/org/waveprotocol/wave/federation/xmpp/XmppFederationHostForDomainTest.java +++ b/test/org/waveprotocol/wave/federation/xmpp/XmppFederationHostForDomainTest.java @@ -25,6 +25,7 @@ import static org.mockito.Mockito.verify; import com.google.protobuf.ByteString; +import com.typesafe.config.ConfigFactory; import junit.framework.TestCase; import org.waveprotocol.wave.federation.ProtocolHashedVersionFactory; @@ -110,12 +111,15 @@ public class XmppFederationHostForDomainTest extends TestCase { } }; - disco = new MockDisco(null); + disco = new MockDisco(); transport = new MockOutgoingPacketTransport(); XmppManager manager = new XmppManager(mock(XmppFederationHost.class), mock(XmppFederationRemote.class), - disco, transport, LOCAL_JID); - fedHost = new XmppFederationHostForDomain(REMOTE_DOMAIN, manager, disco, LOCAL_JID); + disco, transport, ConfigFactory.parseString("federation.xmpp_jid : " + + LOCAL_JID)); + fedHost = new XmppFederationHostForDomain( + REMOTE_DOMAIN, manager, disco, ConfigFactory.parseString("federation.xmpp_jid : " + + LOCAL_JID)); } @Override @@ -230,7 +234,7 @@ public class XmppFederationHostForDomainTest extends TestCase { * @param updateCallback result callback */ private void update(WaveletFederationListener.WaveletUpdateCallback updateCallback) { - fedHost.waveletUpdate(WAVELET_NAME, Collections.<ByteString>singletonList(DELTA_BYTESTRING), + fedHost.waveletUpdate(WAVELET_NAME, Collections.singletonList(DELTA_BYTESTRING), null, updateCallback); } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/test/org/waveprotocol/wave/federation/xmpp/XmppFederationRemoteTest.java ---------------------------------------------------------------------- diff --git a/test/org/waveprotocol/wave/federation/xmpp/XmppFederationRemoteTest.java b/test/org/waveprotocol/wave/federation/xmpp/XmppFederationRemoteTest.java index 3c19283..63eab47 100644 --- a/test/org/waveprotocol/wave/federation/xmpp/XmppFederationRemoteTest.java +++ b/test/org/waveprotocol/wave/federation/xmpp/XmppFederationRemoteTest.java @@ -19,45 +19,40 @@ package org.waveprotocol.wave.federation.xmpp; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyLong; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; -import static org.mockito.Mockito.when; - import com.google.common.collect.ImmutableList; import com.google.protobuf.ByteString; - +import com.typesafe.config.ConfigFactory; import junit.framework.TestCase; - import org.dom4j.Element; import org.mockito.ArgumentCaptor; -import org.waveprotocol.wave.federation.ProtocolHashedVersionFactory; -import org.waveprotocol.wave.federation.WaveletFederationListener; -import org.waveprotocol.wave.federation.WaveletFederationProvider; import org.waveprotocol.wave.federation.FederationErrorProto.FederationError; import org.waveprotocol.wave.federation.Proto.ProtocolHashedVersion; import org.waveprotocol.wave.federation.Proto.ProtocolSignedDelta; import org.waveprotocol.wave.federation.Proto.ProtocolSignerInfo; +import org.waveprotocol.wave.federation.ProtocolHashedVersionFactory; +import org.waveprotocol.wave.federation.WaveletFederationListener; import org.waveprotocol.wave.federation.WaveletFederationListener.WaveletUpdateCallback; +import org.waveprotocol.wave.federation.WaveletFederationProvider; import org.waveprotocol.wave.federation.WaveletFederationProvider.DeltaSignerInfoResponseListener; import org.waveprotocol.wave.federation.WaveletFederationProvider.HistoryResponseListener; import org.waveprotocol.wave.federation.WaveletFederationProvider.PostSignerInfoResponseListener; import org.waveprotocol.wave.federation.WaveletFederationProvider.SubmitResultListener; +import org.waveprotocol.wave.model.id.URIEncoderDecoder.EncodingException; import org.waveprotocol.wave.model.id.WaveId; import org.waveprotocol.wave.model.id.WaveletId; import org.waveprotocol.wave.model.id.WaveletName; -import org.waveprotocol.wave.model.id.URIEncoderDecoder.EncodingException; import org.xmpp.packet.IQ; import org.xmpp.packet.Message; import org.xmpp.packet.PacketError; import java.util.List; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyLong; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.*; + /** * Tests for {@link XmppFederationRemote}. * @@ -167,12 +162,15 @@ public class XmppFederationRemoteTest extends TestCase { .thenReturn(mockUpdateListener); // Create mockDisco. It wants an XmppManager, but we don't need to set it here. - disco = new MockDisco("irrelevant"); + disco = new MockDisco(); transport = new MockOutgoingPacketTransport(); - remote = new XmppFederationRemote(mockUpdateListenerFactory, disco, LOCAL_JID); - host = new XmppFederationHost(mockProvider, disco, REMOTE_JID); - manager = new XmppManager(host, remote, disco, transport, LOCAL_JID); + remote = new XmppFederationRemote(mockUpdateListenerFactory, disco, + ConfigFactory.parseString("federation.xmpp_jid : " + LOCAL_JID)); + host = new XmppFederationHost(mockProvider, disco, + ConfigFactory.parseString("federation.xmpp_jid : " + REMOTE_JID)); + manager = new XmppManager(host, remote, disco, transport, + ConfigFactory.parseString("federation.xmpp_jid : " + LOCAL_JID)); remote.setManager(manager); }
