/* * Copyright 2011 Google Inc. * * 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.google.ipc.invalidation.ticl; import com.google.common.base.Preconditions; import com.google.ipc.invalidation.common.DigestFunction; import com.google.ipc.invalidation.external.client.InvalidationClient; import com.google.ipc.invalidation.external.client.InvalidationListener; import com.google.ipc.invalidation.external.client.SystemResources; import com.google.ipc.invalidation.util.InternalBase; import com.google.protobuf.ByteString; import com.google.protos.ipc.invalidation.Channel.NetworkEndpointId; import com.google.protos.ipc.invalidation.ClientProtocol.ClientConfigP; import com.google.protos.ipc.invalidation.ClientProtocol.ObjectIdP; import com.google.protos.ipc.invalidation.ClientProtocol.RegistrationSummary; import java.util.Collection; /** * An interface that exposes some extra methods for testing an invalidation client implementation. * */ public interface TestableInvalidationClient extends InvalidationClient { /** The state of the registration manager exposed for testing. */ public class RegistrationManagerState extends InternalBase { /** The registration summary of all objects registered by the client (known at the client). */ private final RegistrationSummary clientSummary; /** The last known registration summary from the server. */ private final RegistrationSummary serverSummary; /** The objects registered by the client (as known at the client). */ private final Collection<ObjectIdP> registeredObjects; public RegistrationManagerState(RegistrationSummary clientSummary, RegistrationSummary serverSummary, Collection<ObjectIdP> registeredObjects) { this.clientSummary = Preconditions.checkNotNull(clientSummary); this.serverSummary = Preconditions.checkNotNull(serverSummary); this.registeredObjects = Preconditions.checkNotNull(registeredObjects); } public RegistrationSummary getClientSummary() { return clientSummary; } public RegistrationSummary getServerSummary() { return serverSummary; } public Collection<ObjectIdP> getRegisteredObjects() { return registeredObjects; } } /** Returns whether the Ticl is started. */ boolean isStartedForTest(); /** Stops the system resources. */ void stopResources(); /** Returns the current time on the client. */ long getResourcesTimeMs(); /** Returns the client internal scheduler */ SystemResources.Scheduler getInternalSchedulerForTest(); /** Returns the client storage. */ SystemResources.Storage getStorage(); /** Returns a snapshot of the performance counters/statistics . */ Statistics getStatisticsForTest(); /** Returns the digest function used for computing digests for object registrations. */ DigestFunction getDigestFunctionForTest(); /** * Returns a copy of the registration manager's state * <p> * REQUIRES: This method is called on the internal scheduler. */ RegistrationManagerState getRegistrationManagerStateCopyForTest(); /** * Changes the existing delay for the network timeout delay in the operation scheduler to be * {@code delayMs}. */ void changeNetworkTimeoutDelayForTest(int delayMs); /** * Changes the existing delay for the heartbeat delay in the operation scheduler to be * {@code delayMs}. */ void changeHeartbeatDelayForTest(int delayMs); /** * Sets the digest store to be {@code digestStore} for testing purposes. * <p> * REQUIRES: This method is called before the Ticl has been started. */ void setDigestStoreForTest(DigestStore<ObjectIdP> digestStore); /** Returns the client id that is used for squelching invalidations on the server side. */ byte[] getApplicationClientIdForTest(); /** Returns the listener that was registered by the caller. */ InvalidationListener getInvalidationListenerForTest(); /** Returns the current client token. */ ByteString getClientTokenForTest(); /** Returns the single key used to write all the Ticl state. */ String getClientTokenKeyForTest(); /** Returns the next time a message is allowed to be sent to the server (could be in the past). */ long getNextMessageSendTimeMsForTest(); /** Returns the configuration used by the client. */ ClientConfigP getConfigForTest(); /** * Returns the network endpoint id of the client. May throw {@code UnsupportedOperationException}. */ NetworkEndpointId getNetworkIdForTest(); }