Updated Branches: refs/heads/master c7e936926 -> fde547897
fix for JCLOUDS-360, replace platform-dependent assumption that nanosecond resolution ticker uses epoch 1970 as origin with guaranteed behaviour at millisecond-level resolution of System.currentTimeMillis Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-google/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-google/commit/fde54789 Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-google/tree/fde54789 Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-google/diff/fde54789 Branch: refs/heads/master Commit: fde547897958ba47e65d7ad1fbf7aa80f8c73e54 Parents: c7e9369 Author: Alex Heneveld <[email protected]> Authored: Tue Oct 29 22:25:27 2013 -0700 Committer: Alex Heneveld <[email protected]> Committed: Tue Oct 29 23:18:55 2013 -0700 ---------------------------------------------------------------------- .../internal/BaseGoogleComputeEngineExpectTest.java | 14 +++++--------- .../oauth/v2/functions/BuildTokenRequest.java | 15 +++++++++------ 2 files changed, 14 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-google/blob/fde54789/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/internal/BaseGoogleComputeEngineExpectTest.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/internal/BaseGoogleComputeEngineExpectTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/internal/BaseGoogleComputeEngineExpectTest.java index bb2eec1..1c360f2 100644 --- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/internal/BaseGoogleComputeEngineExpectTest.java +++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/internal/BaseGoogleComputeEngineExpectTest.java @@ -53,13 +53,14 @@ import org.jclouds.http.HttpRequest; import org.jclouds.http.HttpResponse; import org.jclouds.io.Payload; import org.jclouds.oauth.v2.OAuthConstants; +import org.jclouds.oauth.v2.config.OAuthProperties; import org.jclouds.rest.internal.BaseRestApiExpectTest; import org.jclouds.ssh.SshKeys; import org.jclouds.util.Strings2; import com.google.common.base.Joiner; import com.google.common.base.Supplier; -import com.google.common.base.Ticker; +import com.google.common.base.Suppliers; import com.google.inject.Binder; import com.google.inject.Module; import com.google.inject.TypeLiteral; @@ -101,13 +102,8 @@ public class BaseGoogleComputeEngineExpectTest<T> extends BaseRestApiExpectTest< return new Module() { @Override public void configure(Binder binder) { - // predictable time - binder.bind(Ticker.class).toInstance(new Ticker() { - @Override - public long read() { - return 0; - } - }); + // Predicatable time + binder.bind(new TypeLiteral<Supplier<Long>>() {}).toInstance(Suppliers.ofInstance(0L)); try { KeyFactory keyfactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyfactory.generatePrivate(privateKeySpec(newStringPayload @@ -149,7 +145,7 @@ public class BaseGoogleComputeEngineExpectTest<T> extends BaseRestApiExpectTest< protected Properties setupProperties() { Properties props = super.setupProperties(); // use no sig algorithm for expect tests (means no credential is required either) - props.put("jclouds.oauth.signature-or-mac-algorithm", OAuthConstants.NO_ALGORITHM); + props.put(OAuthProperties.SIGNATURE_OR_MAC_ALGORITHM, OAuthConstants.NO_ALGORITHM); return props; } http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-google/blob/fde54789/oauth/src/main/java/org/jclouds/oauth/v2/functions/BuildTokenRequest.java ---------------------------------------------------------------------- diff --git a/oauth/src/main/java/org/jclouds/oauth/v2/functions/BuildTokenRequest.java b/oauth/src/main/java/org/jclouds/oauth/v2/functions/BuildTokenRequest.java index d10b9a9..1984028 100644 --- a/oauth/src/main/java/org/jclouds/oauth/v2/functions/BuildTokenRequest.java +++ b/oauth/src/main/java/org/jclouds/oauth/v2/functions/BuildTokenRequest.java @@ -23,7 +23,6 @@ import static org.jclouds.oauth.v2.config.OAuthProperties.SCOPES; import static org.jclouds.oauth.v2.config.OAuthProperties.SIGNATURE_OR_MAC_ALGORITHM; import java.util.Map; -import java.util.concurrent.TimeUnit; import javax.inject.Singleton; @@ -39,7 +38,6 @@ import org.jclouds.rest.internal.GeneratedHttpRequest; import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Supplier; -import com.google.common.base.Ticker; import com.google.common.collect.ImmutableMap; import com.google.common.reflect.Invokable; import com.google.inject.Inject; @@ -71,10 +69,15 @@ public class BuildTokenRequest implements Function<GeneratedHttpRequest, TokenRe @Named(SCOPES) protected String globalScopes = null; + // injectable so expect tests can override with a predictable value @Inject(optional = true) - public Ticker ticker = Ticker.systemTicker(); - - + protected Supplier<Long> timeSourceMillisSinceEpoch = new Supplier<Long>() { + @Override + public Long get() { + return System.currentTimeMillis(); + } + }; + @Inject public BuildTokenRequest(@Named(AUDIENCE) String assertionTargetDescription, @Named(SIGNATURE_OR_MAC_ALGORITHM) String signatureAlgorithm, @@ -89,7 +92,7 @@ public class BuildTokenRequest implements Function<GeneratedHttpRequest, TokenRe @Override public TokenRequest apply(GeneratedHttpRequest request) { - long now = TimeUnit.SECONDS.convert(ticker.read(), TimeUnit.NANOSECONDS); + long now = timeSourceMillisSinceEpoch.get() / 1000; // fetch the token Header header = new Header.Builder()
