summaryrefslogtreecommitdiffstats
path: root/client-compiler/src
diff options
context:
space:
mode:
authorelmot <elmot@vaadin.com>2016-03-18 17:29:27 +0200
committerelmot <elmot@vaadin.com>2016-03-22 11:27:53 +0200
commit521ec24c62a1ba476795369a42114fede7043f44 (patch)
tree0a8991b4c2a1bb8c2a6738701d74d6d43439bb59 /client-compiler/src
parent646cbaecbb5ef0e1cbefc7570e0340d926b7c85a (diff)
downloadvaadin-framework-521ec24c62a1ba476795369a42114fede7043f44.tar.gz
vaadin-framework-521ec24c62a1ba476795369a42114fede7043f44.zip
Build client-compiler with maven
Change-Id: Ic86a95ce44cc37c8d34d607b39f2aec4cc922ce2
Diffstat (limited to 'client-compiler/src')
-rw-r--r--client-compiler/src/main/java/com/vaadin/sass/linker/SassLinker.java (renamed from client-compiler/src/com/vaadin/sass/linker/SassLinker.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/AcceptCriteriaFactoryGenerator.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/AcceptCriteriaFactoryGenerator.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/ConnectorBundleLoaderFactory.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/ConnectorBundleLoaderFactory.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/ArraySerializer.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ArraySerializer.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/ClientRpcVisitor.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ClientRpcVisitor.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/ConnectorBundle.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorBundle.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/ConnectorInitVisitor.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorInitVisitor.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/CustomSerializer.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/CustomSerializer.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/EnumSerializer.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/EnumSerializer.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/FieldProperty.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/FieldProperty.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/GeneratedSerializer.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/GeneratedSerializer.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/JsonSerializer.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/JsonSerializer.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/MethodProperty.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/MethodProperty.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/OnStateChangeVisitor.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/OnStateChangeVisitor.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/Property.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/Property.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/RendererVisitor.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/RendererVisitor.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/ServerRpcVisitor.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ServerRpcVisitor.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/StateInitVisitor.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/StateInitVisitor.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/TypeVisitor.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/TypeVisitor.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java (renamed from client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/tools/CvalAddonsChecker.java (renamed from client-compiler/src/com/vaadin/tools/CvalAddonsChecker.java)0
-rw-r--r--client-compiler/src/main/java/com/vaadin/tools/CvalChecker.java (renamed from client-compiler/src/com/vaadin/tools/CvalChecker.java)0
-rwxr-xr-xclient-compiler/src/main/java/com/vaadin/tools/WidgetsetCompiler.java (renamed from client-compiler/src/com/vaadin/tools/WidgetsetCompiler.java)0
-rw-r--r--client-compiler/src/main/resources/com/google/gwt/dev/About.properties2
-rw-r--r--client-compiler/src/main/resources/com/vaadin/tools/CvalChecker.properties (renamed from client-compiler/src/com/vaadin/tools/CvalChecker.properties)0
-rw-r--r--client-compiler/src/test/java/com/vaadin/tools/CvalAddonsCheckerTest.java190
-rw-r--r--client-compiler/src/test/java/com/vaadin/tools/CvalAddonstCheckerUseCasesTest.java273
-rw-r--r--client-compiler/src/test/java/com/vaadin/tools/CvalCheckerTest.java495
28 files changed, 960 insertions, 0 deletions
diff --git a/client-compiler/src/com/vaadin/sass/linker/SassLinker.java b/client-compiler/src/main/java/com/vaadin/sass/linker/SassLinker.java
index dda6733384..dda6733384 100644
--- a/client-compiler/src/com/vaadin/sass/linker/SassLinker.java
+++ b/client-compiler/src/main/java/com/vaadin/sass/linker/SassLinker.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/AcceptCriteriaFactoryGenerator.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/AcceptCriteriaFactoryGenerator.java
index 2d08329e9a..2d08329e9a 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/AcceptCriteriaFactoryGenerator.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/AcceptCriteriaFactoryGenerator.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/ConnectorBundleLoaderFactory.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/ConnectorBundleLoaderFactory.java
index 2b8ccc87d0..2b8ccc87d0 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/ConnectorBundleLoaderFactory.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/ConnectorBundleLoaderFactory.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ArraySerializer.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/ArraySerializer.java
index 0049ae9b50..0049ae9b50 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ArraySerializer.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/ArraySerializer.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ClientRpcVisitor.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/ClientRpcVisitor.java
index 992a012005..992a012005 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ClientRpcVisitor.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/ClientRpcVisitor.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorBundle.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/ConnectorBundle.java
index b4531eb08e..b4531eb08e 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorBundle.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/ConnectorBundle.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorInitVisitor.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/ConnectorInitVisitor.java
index ea3b097fa2..ea3b097fa2 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorInitVisitor.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/ConnectorInitVisitor.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/CustomSerializer.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/CustomSerializer.java
index bb3dd4f61d..bb3dd4f61d 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/CustomSerializer.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/CustomSerializer.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/EnumSerializer.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/EnumSerializer.java
index 9876baf946..9876baf946 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/EnumSerializer.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/EnumSerializer.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/FieldProperty.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/FieldProperty.java
index a31dafe05c..a31dafe05c 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/FieldProperty.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/FieldProperty.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/GeneratedSerializer.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/GeneratedSerializer.java
index 6afb172ea2..6afb172ea2 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/GeneratedSerializer.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/GeneratedSerializer.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/JsonSerializer.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/JsonSerializer.java
index a7a6c568da..a7a6c568da 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/JsonSerializer.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/JsonSerializer.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/MethodProperty.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/MethodProperty.java
index 32aad92774..32aad92774 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/MethodProperty.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/MethodProperty.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/OnStateChangeVisitor.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/OnStateChangeVisitor.java
index 1c0da9d9e8..1c0da9d9e8 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/OnStateChangeVisitor.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/OnStateChangeVisitor.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/Property.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/Property.java
index 0c849bead5..0c849bead5 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/Property.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/Property.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/RendererVisitor.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/RendererVisitor.java
index 2e54d00aab..2e54d00aab 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/RendererVisitor.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/RendererVisitor.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ServerRpcVisitor.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/ServerRpcVisitor.java
index 86ece28041..86ece28041 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ServerRpcVisitor.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/ServerRpcVisitor.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/StateInitVisitor.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/StateInitVisitor.java
index 046c5c4611..046c5c4611 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/StateInitVisitor.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/StateInitVisitor.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/TypeVisitor.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/TypeVisitor.java
index 028e4cc44d..028e4cc44d 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/TypeVisitor.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/TypeVisitor.java
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java
index 9a9cac18ba..9a9cac18ba 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java
+++ b/client-compiler/src/main/java/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java
diff --git a/client-compiler/src/com/vaadin/tools/CvalAddonsChecker.java b/client-compiler/src/main/java/com/vaadin/tools/CvalAddonsChecker.java
index aab7231258..aab7231258 100644
--- a/client-compiler/src/com/vaadin/tools/CvalAddonsChecker.java
+++ b/client-compiler/src/main/java/com/vaadin/tools/CvalAddonsChecker.java
diff --git a/client-compiler/src/com/vaadin/tools/CvalChecker.java b/client-compiler/src/main/java/com/vaadin/tools/CvalChecker.java
index 9217781695..9217781695 100644
--- a/client-compiler/src/com/vaadin/tools/CvalChecker.java
+++ b/client-compiler/src/main/java/com/vaadin/tools/CvalChecker.java
diff --git a/client-compiler/src/com/vaadin/tools/WidgetsetCompiler.java b/client-compiler/src/main/java/com/vaadin/tools/WidgetsetCompiler.java
index 7c06e9d7af..7c06e9d7af 100755
--- a/client-compiler/src/com/vaadin/tools/WidgetsetCompiler.java
+++ b/client-compiler/src/main/java/com/vaadin/tools/WidgetsetCompiler.java
diff --git a/client-compiler/src/main/resources/com/google/gwt/dev/About.properties b/client-compiler/src/main/resources/com/google/gwt/dev/About.properties
new file mode 100644
index 0000000000..364c323136
--- /dev/null
+++ b/client-compiler/src/main/resources/com/google/gwt/dev/About.properties
@@ -0,0 +1,2 @@
+gwt.version=${project.version}
+gwt.svnrev=
diff --git a/client-compiler/src/com/vaadin/tools/CvalChecker.properties b/client-compiler/src/main/resources/com/vaadin/tools/CvalChecker.properties
index 3f4fd52cb7..3f4fd52cb7 100644
--- a/client-compiler/src/com/vaadin/tools/CvalChecker.properties
+++ b/client-compiler/src/main/resources/com/vaadin/tools/CvalChecker.properties
diff --git a/client-compiler/src/test/java/com/vaadin/tools/CvalAddonsCheckerTest.java b/client-compiler/src/test/java/com/vaadin/tools/CvalAddonsCheckerTest.java
new file mode 100644
index 0000000000..c6200bc7e0
--- /dev/null
+++ b/client-compiler/src/test/java/com/vaadin/tools/CvalAddonsCheckerTest.java
@@ -0,0 +1,190 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * 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.vaadin.tools;
+
+import static com.vaadin.tools.CvalAddonsChecker.VAADIN_AGPL;
+import static com.vaadin.tools.CvalAddonsChecker.VAADIN_CVAL;
+import static com.vaadin.tools.CvalChecker.GRACE_DAYS_MSECS;
+import static com.vaadin.tools.CvalChecker.computeLicenseName;
+import static com.vaadin.tools.CvalChecker.deleteCache;
+import static com.vaadin.tools.CvalCheckerTest.VALID_KEY;
+import static com.vaadin.tools.CvalCheckerTest.addLicensedJarToClasspath;
+import static com.vaadin.tools.CvalCheckerTest.cacheExists;
+import static com.vaadin.tools.CvalCheckerTest.captureSystemOut;
+import static com.vaadin.tools.CvalCheckerTest.productNameAgpl;
+import static com.vaadin.tools.CvalCheckerTest.productNameApache;
+import static com.vaadin.tools.CvalCheckerTest.productNameCval;
+import static com.vaadin.tools.CvalCheckerTest.readSystemOut;
+import static com.vaadin.tools.CvalCheckerTest.saveCache;
+import static com.vaadin.tools.CvalCheckerTest.unreachableLicenseProvider;
+import static com.vaadin.tools.CvalCheckerTest.validLicenseProvider;
+
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.vaadin.client.metadata.ConnectorBundleLoader.CValUiInfo;
+import com.vaadin.tools.CvalChecker.InvalidCvalException;
+
+/**
+ * The CvalAddonsChecker test.
+ */
+public class CvalAddonsCheckerTest {
+
+ CvalAddonsChecker addonChecker;
+ private String licenseName;
+
+ @Before
+ public void setup() {
+ addonChecker = new CvalAddonsChecker().setLicenseProvider(
+ validLicenseProvider).setFilter(".*test.*");
+ licenseName = computeLicenseName(productNameCval);
+
+ deleteCache(productNameCval);
+ System.getProperties().remove(licenseName);
+
+ // Set up a new URLClassLoader for the thread
+ Thread thread = Thread.currentThread();
+ thread.setContextClassLoader(new URLClassLoader(new URL[0], null));
+ }
+
+ @Test
+ public void testRunChecker() throws Exception {
+ // Create a product .jar with a cval license non required and add to our
+ // classpath
+ addLicensedJarToClasspath(productNameCval, VAADIN_CVAL);
+ // Remove other products in case other tests added them previously
+ addLicensedJarToClasspath(productNameAgpl, null);
+ addLicensedJarToClasspath(productNameApache, null);
+
+ // No license
+ // -> Break compilation
+ System.getProperties().remove(licenseName);
+ addonChecker.setLicenseProvider(validLicenseProvider);
+ try {
+ addonChecker.run();
+ Assert.fail();
+ } catch (InvalidCvalException expected) {
+ }
+ Assert.assertFalse(cacheExists(productNameCval));
+
+ // We have a license that has never been validated from the server and
+ // we are offline
+ // -> Show a message on compile time (“Your license for TouchKit 4 has
+ // not been validated.")
+ System.setProperty(licenseName, VALID_KEY);
+ addonChecker.setLicenseProvider(unreachableLicenseProvider);
+ captureSystemOut();
+ addonChecker.run();
+ Assert.assertTrue(readSystemOut().contains("has not been validated"));
+ Assert.assertFalse(cacheExists(productNameCval));
+
+ // Valid license has previously been validated from the server and we
+ // are offline
+ // -> Use the cached server response
+ System.setProperty(licenseName, VALID_KEY);
+ addonChecker.setLicenseProvider(validLicenseProvider);
+ captureSystemOut();
+ addonChecker.run();
+ Assert.assertTrue(cacheExists(productNameCval));
+ addonChecker.setLicenseProvider(unreachableLicenseProvider);
+ addonChecker.run();
+
+ // Expired license and we are offline
+ // -> If it has expired less than 14 days ago, just work with no nag
+ // messages
+ System.setProperty(licenseName, VALID_KEY);
+ addonChecker.setLicenseProvider(unreachableLicenseProvider);
+ setCacheFileTs(System.currentTimeMillis() - (GRACE_DAYS_MSECS / 2),
+ "normal");
+ captureSystemOut();
+ addonChecker.run();
+
+ // Expired license and we are offline
+ // -> After 14 days, interpret it as expired license
+ setCacheFileTs(System.currentTimeMillis() - (GRACE_DAYS_MSECS * 2),
+ "normal");
+ try {
+ addonChecker.run();
+ Assert.fail();
+ } catch (InvalidCvalException expected) {
+ }
+
+ // Invalid evaluation license
+ // -> Fail compilation with a message
+ // "Your evaluation license for TouchKit 4 is not valid"
+ System.setProperty(licenseName, VALID_KEY);
+ addonChecker.setLicenseProvider(unreachableLicenseProvider);
+ setCacheFileTs(System.currentTimeMillis() - (GRACE_DAYS_MSECS / 2),
+ "evaluation");
+ try {
+ addonChecker.run();
+ Assert.fail();
+ } catch (InvalidCvalException expected) {
+ Assert.assertTrue(expected.getMessage().contains("expired"));
+ }
+
+ // Valid evaluation license
+ // -> The choice on whether to show the message is generated in
+ // widgetset
+ // compilation phase. No license checks are done in application runtime.
+ System.setProperty(licenseName, VALID_KEY);
+ addonChecker.setLicenseProvider(unreachableLicenseProvider);
+ setCacheFileTs(System.currentTimeMillis() + GRACE_DAYS_MSECS,
+ "evaluation");
+ List<CValUiInfo> uiInfo = addonChecker.run();
+ Assert.assertEquals(1, uiInfo.size());
+ Assert.assertEquals("Test " + productNameCval, uiInfo.get(0).product);
+ Assert.assertEquals("evaluation", uiInfo.get(0).type);
+
+ // Valid real license
+ // -> Work as expected
+ // -> Show info message “Using TouchKit 4 license
+ // 312-312321-321312-3-12-312-312
+ // licensed to <licensee> (1 developer license)"
+ System.setProperty(licenseName, VALID_KEY);
+ addonChecker.setLicenseProvider(validLicenseProvider);
+ captureSystemOut();
+ addonChecker.run();
+ Assert.assertTrue(readSystemOut().contains("valid"));
+ }
+
+ @Test
+ public void validateMultipleLicenses() throws Exception {
+ addLicensedJarToClasspath(productNameCval, VAADIN_CVAL);
+ addLicensedJarToClasspath(productNameAgpl, VAADIN_AGPL);
+ addLicensedJarToClasspath(productNameApache, "apache");
+
+ // We have a valid license for all products
+ System.setProperty(licenseName, VALID_KEY);
+ captureSystemOut();
+ addonChecker.run();
+ String out = readSystemOut();
+ Assert.assertTrue(out.contains("valid"));
+ Assert.assertTrue(out.contains("AGPL"));
+ Assert.assertTrue(cacheExists(productNameCval));
+ }
+
+ private void setCacheFileTs(long expireTs, String type) {
+ saveCache(productNameCval, null, false, expireTs, type);
+ }
+
+}
diff --git a/client-compiler/src/test/java/com/vaadin/tools/CvalAddonstCheckerUseCasesTest.java b/client-compiler/src/test/java/com/vaadin/tools/CvalAddonstCheckerUseCasesTest.java
new file mode 100644
index 0000000000..01cfe2087e
--- /dev/null
+++ b/client-compiler/src/test/java/com/vaadin/tools/CvalAddonstCheckerUseCasesTest.java
@@ -0,0 +1,273 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * 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.vaadin.tools;
+
+import static com.vaadin.tools.CvalAddonsChecker.VAADIN_AGPL;
+import static com.vaadin.tools.CvalAddonsChecker.VAADIN_CVAL;
+import static com.vaadin.tools.CvalChecker.computeLicenseName;
+import static com.vaadin.tools.CvalChecker.deleteCache;
+import static com.vaadin.tools.CvalCheckerTest.INVALID_KEY;
+import static com.vaadin.tools.CvalCheckerTest.VALID_KEY;
+import static com.vaadin.tools.CvalCheckerTest.addLicensedJarToClasspath;
+import static com.vaadin.tools.CvalCheckerTest.cachedPreferences;
+import static com.vaadin.tools.CvalCheckerTest.captureSystemOut;
+import static com.vaadin.tools.CvalCheckerTest.expiredLicenseProvider;
+import static com.vaadin.tools.CvalCheckerTest.productNameAgpl;
+import static com.vaadin.tools.CvalCheckerTest.productNameCval;
+import static com.vaadin.tools.CvalCheckerTest.readSystemOut;
+import static com.vaadin.tools.CvalCheckerTest.restoreSystemOut;
+import static com.vaadin.tools.CvalCheckerTest.saveCache;
+import static com.vaadin.tools.CvalCheckerTest.unreachableLicenseProvider;
+import static com.vaadin.tools.CvalCheckerTest.validEvaluationLicenseProvider;
+import static com.vaadin.tools.CvalCheckerTest.validLicenseProvider;
+
+import java.net.URL;
+import java.net.URLClassLoader;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.vaadin.tools.CvalChecker.CvalServer;
+
+/**
+ * Tests for Use Cases
+ */
+public class CvalAddonstCheckerUseCasesTest {
+
+ enum License {
+ NONE, EVAL, INVALID, REAL, EVAL_EXPIRED, REAL_EXPIRED
+ };
+
+ enum Version {
+ AGPL, CVAL
+ };
+
+ enum Validated {
+ YES, NO, OLD_KEY
+ };
+
+ enum Network {
+ ON, OFF
+ };
+
+ enum Compile {
+ YES, NO
+ };
+
+ enum Cached {
+ YES, NO
+ };
+
+ enum Message {
+ AGPL("AGPL"), VALID(">.* valid"), INVALID("not valid"), NO_LICENSE(
+ "not found"), NO_VALIDATED("has not been validated"), EXPIRED(
+ "has expired"), EVALUATION("evaluation");
+
+ String msg;
+
+ Message(String s) {
+ msg = s;
+ }
+ }
+
+ @Before
+ public void setUp() {
+ // Set up a new URLClassLoader for the thread
+ Thread thread = Thread.currentThread();
+ thread.setContextClassLoader(new URLClassLoader(new URL[0], null));
+ }
+
+ /* TODO: Use more descriptive test names */
+
+ @Test
+ public void testUseCase1() throws Exception {
+ useCase(1, License.NONE, Version.AGPL, Validated.NO, Network.OFF,
+ Compile.YES, Cached.NO, Message.AGPL);
+ }
+
+ @Test
+ public void testUseCase2() throws Exception {
+ useCase(2, License.NONE, Version.CVAL, Validated.NO, Network.ON,
+ Compile.NO, Cached.NO, Message.NO_LICENSE);
+ }
+
+ @Test
+ public void testUseCase3() throws Exception {
+ useCase(3, License.NONE, Version.CVAL, Validated.NO, Network.OFF,
+ Compile.NO, Cached.NO, Message.NO_LICENSE);
+ }
+
+ @Test
+ public void testUseCase4() throws Exception {
+ useCase(4, License.EVAL, Version.CVAL, Validated.NO, Network.ON,
+ Compile.YES, Cached.YES, Message.EVALUATION);
+ }
+
+ @Test
+ public void testUseCase5() throws Exception {
+ useCase(5, License.INVALID, Version.CVAL, Validated.NO, Network.OFF,
+ Compile.YES, Cached.NO, Message.NO_VALIDATED);
+ }
+
+ @Test
+ public void testUseCase6() throws Exception {
+ useCase(6, License.INVALID, Version.CVAL, Validated.NO, Network.ON,
+ Compile.NO, Cached.NO, Message.INVALID);
+ }
+
+ @Test
+ public void testUseCase7() throws Exception {
+ useCase(7, License.REAL, Version.CVAL, Validated.NO, Network.ON,
+ Compile.YES, Cached.YES, Message.VALID);
+ }
+
+ @Test
+ public void testUseCase8() throws Exception {
+ useCase(8, License.REAL, Version.CVAL, Validated.NO, Network.OFF,
+ Compile.YES, Cached.NO, Message.NO_VALIDATED);
+ }
+
+ @Test
+ public void testUseCase9() throws Exception {
+ useCase(9, License.REAL, Version.CVAL, Validated.YES, Network.OFF,
+ Compile.YES, Cached.YES, Message.VALID);
+ }
+
+ @Test
+ public void testUseCase10() throws Exception {
+ useCase(10, License.EVAL_EXPIRED, Version.CVAL, Validated.NO,
+ Network.ON, Compile.NO, Cached.YES, Message.EXPIRED);
+ }
+
+ @Test
+ public void testUseCase11() throws Exception {
+ useCase(11, License.EVAL_EXPIRED, Version.CVAL, Validated.YES,
+ Network.OFF, Compile.NO, Cached.YES, Message.EXPIRED);
+ }
+
+ @Test
+ public void testUseCase12() throws Exception {
+ useCase(12, License.REAL_EXPIRED, Version.CVAL, Validated.YES,
+ Network.OFF, Compile.NO, Cached.YES, Message.EXPIRED);
+ }
+
+ @Test
+ public void testUseCase13() throws Exception {
+ useCase(13, License.REAL_EXPIRED, Version.CVAL, Validated.NO,
+ Network.ON, Compile.NO, Cached.YES, Message.EXPIRED);
+ }
+
+ @Test
+ public void testUseCase14() throws Exception {
+ useCase(14, License.INVALID, Version.CVAL, Validated.OLD_KEY,
+ Network.OFF, Compile.YES, Cached.NO, Message.NO_VALIDATED);
+ }
+
+ @Test
+ public void testMultipleLicenseUseCase15() throws Exception {
+ addLicensedJarToClasspath("test.foo", VAADIN_CVAL);
+ System.setProperty(computeLicenseName("test.foo"), VALID_KEY);
+ useCase(15, License.REAL, Version.CVAL, Validated.YES, Network.OFF,
+ Compile.YES, Cached.YES, Message.NO_VALIDATED);
+ }
+
+ @Test
+ public void testMultipleLicenseUseCase16() throws Exception {
+ addLicensedJarToClasspath("test.foo", VAADIN_CVAL);
+ System.setProperty(computeLicenseName("test.foo"), VALID_KEY);
+ useCase(16, License.REAL, Version.CVAL, Validated.YES, Network.ON,
+ Compile.NO, Cached.YES, Message.INVALID);
+ }
+
+ private void useCase(int number, License lic, Version ver, Validated val,
+ Network net, Compile res, Cached cached, Message msg)
+ throws Exception {
+
+ if (ver == Version.AGPL) {
+ addLicensedJarToClasspath(productNameAgpl, VAADIN_AGPL);
+ addLicensedJarToClasspath(productNameCval, null);
+ } else {
+ addLicensedJarToClasspath(productNameAgpl, null);
+ addLicensedJarToClasspath(productNameCval, VAADIN_CVAL);
+ }
+
+ String licenseName = computeLicenseName(productNameCval);
+
+ if (lic == License.NONE) {
+ System.getProperties().remove(licenseName);
+ } else if (lic == License.INVALID) {
+ System.setProperty(licenseName, INVALID_KEY);
+ } else {
+ System.setProperty(licenseName, VALID_KEY);
+ }
+
+ if (val == Validated.NO) {
+ deleteCache(productNameCval);
+ } else {
+ String type = lic == License.EVAL || lic == License.EVAL_EXPIRED ? "evaluation"
+ : null;
+ Boolean expired = lic == License.EVAL_EXPIRED
+ || lic == License.REAL_EXPIRED ? true : null;
+ String key = val == Validated.OLD_KEY ? "oldkey" : null;
+ saveCache(productNameCval, key, expired, null, type);
+ }
+
+ CvalServer licenseProvider = validLicenseProvider;
+ if (net == Network.OFF) {
+ licenseProvider = unreachableLicenseProvider;
+ } else if (lic == License.EVAL_EXPIRED || lic == License.REAL_EXPIRED) {
+ licenseProvider = expiredLicenseProvider;
+ } else if (lic == License.EVAL) {
+ licenseProvider = validEvaluationLicenseProvider;
+ }
+
+ CvalAddonsChecker addonChecker = new CvalAddonsChecker();
+ addonChecker.setLicenseProvider(licenseProvider).setFilter(".*test.*");
+
+ captureSystemOut();
+
+ String testNumber = "Test #" + number + " ";
+ String message;
+ try {
+ addonChecker.run();
+ message = readSystemOut();
+ if (res == Compile.NO) {
+ Assert.fail(testNumber + "Exception not thrown:" + message);
+ }
+ } catch (Exception e) {
+ restoreSystemOut();
+ message = e.getMessage();
+ if (res == Compile.YES) {
+ Assert.fail(testNumber + "Unexpected Exception: "
+ + e.getMessage());
+ }
+ }
+
+ // System.err.println("\n> " + testNumber + " " + lic + " " + ver + " "
+ // + val + " " + net + " " + res + " " + cached + "\n" + message);
+
+ Assert.assertTrue(testNumber + "Fail:\n" + message
+ + "\nDoes not match:" + msg.msg,
+ message.matches("(?s).*" + msg.msg + ".*"));
+
+ String c = cachedPreferences(productNameCval);
+ Assert.assertTrue(testNumber + "Fail: cacheExists != "
+ + (cached == Cached.YES) + "\n " + c,
+ (c != null) == (cached == Cached.YES));
+ }
+}
diff --git a/client-compiler/src/test/java/com/vaadin/tools/CvalCheckerTest.java b/client-compiler/src/test/java/com/vaadin/tools/CvalCheckerTest.java
new file mode 100644
index 0000000000..6e1a8e57ed
--- /dev/null
+++ b/client-compiler/src/test/java/com/vaadin/tools/CvalCheckerTest.java
@@ -0,0 +1,495 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * 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.vaadin.tools;
+
+import static com.vaadin.tools.CvalAddonsChecker.VAADIN_ADDON_LICENSE;
+import static com.vaadin.tools.CvalAddonsChecker.VAADIN_ADDON_NAME;
+import static com.vaadin.tools.CvalAddonsChecker.VAADIN_ADDON_TITLE;
+import static com.vaadin.tools.CvalAddonsChecker.VAADIN_ADDON_VERSION;
+import static com.vaadin.tools.CvalChecker.GRACE_DAYS_MSECS;
+import static com.vaadin.tools.CvalChecker.cacheLicenseInfo;
+import static com.vaadin.tools.CvalChecker.deleteCache;
+import static com.vaadin.tools.CvalChecker.parseJson;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.jar.JarOutputStream;
+import java.util.jar.Manifest;
+import java.util.prefs.Preferences;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.vaadin.tools.CvalChecker.CvalInfo;
+import com.vaadin.tools.CvalChecker.CvalServer;
+import com.vaadin.tools.CvalChecker.InvalidCvalException;
+import com.vaadin.tools.CvalChecker.UnreachableCvalServerException;
+
+/**
+ * The CvalChecker test.
+ */
+public class CvalCheckerTest {
+
+ static final String productNameCval = "test.cval";
+ static final String productTitleCval = "Vaadin Test";
+ static final String productNameAgpl = "test.agpl";
+ static final String productTitleAgpl = "Vaadin Test";
+ static final String productNameApache = "test.apache";
+ static final String VALID_KEY = "valid";
+ static final String INVALID_KEY = "invalid";
+
+ static final String responseJson = "{'licenseKey':'" + VALID_KEY + "',"
+ + "'licensee':'Test User','type':'normal',"
+ + "'expiredEpoch':1893511225000," + "'product':{'name':'"
+ + productNameCval + "', 'version': 2}}";
+
+ static final String responseJsonWithNullVersion = "{'licenseKey':'"
+ + VALID_KEY + "'," + "'licensee':'Test User','type':'normal',"
+ + "'expiredEpoch':1893511225000," + "'product':{'name':'"
+ + productNameCval + "', 'version': null}}";
+
+ private static ByteArrayOutputStream outContent;
+
+ // A provider returning a valid license if productKey is valid or null if
+ // invalid
+ static final CvalServer validLicenseProvider = new CvalServer() {
+ @Override
+ String askServer(String productName, String productKey, int timeout) {
+ return VALID_KEY.equals(productKey) ? responseJson : null;
+ }
+ };
+ // A provider returning a valid evaluation license
+ static final CvalServer validEvaluationLicenseProvider = new CvalServer() {
+ @Override
+ String askServer(String productName, String productKey, int timeout) {
+ return responseJson.replace("normal", "evaluation");
+ }
+ };
+ // A provider returning an expired license with a server message
+ static final CvalServer expiredLicenseProviderWithMessage = new CvalServer() {
+ @Override
+ String askServer(String productName, String productKey, int timeout) {
+ return responseJson
+ .replace("'expired",
+ "'message':'Custom\\\\nServer\\\\nMessage','expired':true,'expired");
+ }
+ };
+ // A provider returning an expired license with a server message
+ static final CvalServer expiredLicenseProvider = new CvalServer() {
+ @Override
+ String askServer(String productName, String productKey, int timeout) {
+ return responseJson.replace("'expired", "'expired':true,'expired");
+ }
+ };
+ // A provider returning an expired epoch license
+ static final CvalServer expiredEpochLicenseProvider = new CvalServer() {
+ @Override
+ String askServer(String productName, String productKey, int timeout) {
+ long ts = System.currentTimeMillis() - GRACE_DAYS_MSECS - 1000;
+ return responseJson.replace("1893511225000", "" + ts);
+ }
+ };
+ // A provider returning an unlimited license
+ static final CvalServer unlimitedLicenseProvider = new CvalServer() {
+ @Override
+ String askServer(String productName, String productKey, int timeout) {
+ return responseJson.replaceFirst("1893511225000", "null");
+ }
+ };
+ // An unreachable provider
+ static final CvalServer unreachableLicenseProvider = new CvalServer() {
+ @Override
+ String askServer(String productName, String productKey, int timeout)
+ throws IOException {
+ // Normally there is no route for this ip in public routers, so we
+ // should get a timeout.
+ licenseUrl = "http://localhost:9999/";
+ return super.askServer(productName, productKey, 1000);
+ }
+ };
+ // A provider with 'null' in the version field
+ static final CvalServer nullVersionLicenseProvider = new CvalServer() {
+ @Override
+ String askServer(String productName, String productKey, int timeout)
+ throws IOException {
+ return responseJsonWithNullVersion;
+ }
+ };
+
+ private CvalChecker licenseChecker;
+ private String licenseName;
+
+ @Before
+ public void setup() {
+ licenseChecker = new CvalChecker()
+ .setLicenseProvider(validLicenseProvider);
+ licenseName = CvalChecker.computeLicenseName(productNameCval);
+ System.getProperties().remove(licenseName);
+ deleteCache(productNameCval);
+ }
+
+ @Test
+ public void testValidateProduct() throws Exception {
+ deleteCache(productNameCval);
+
+ // If the license key in our environment is null, throw an exception
+ try {
+ licenseChecker.validateProduct(productNameCval, "2.1",
+ productTitleCval);
+ Assert.fail();
+ } catch (InvalidCvalException expected) {
+ assertEquals(productNameCval, expected.name);
+ }
+ Assert.assertFalse(cacheExists(productNameCval));
+
+ // If the license key is empty, throw an exception
+ System.setProperty(licenseName, "");
+ try {
+ licenseChecker.validateProduct(productNameCval, "2.1",
+ productTitleCval);
+ Assert.fail();
+ } catch (InvalidCvalException expected) {
+ assertEquals(productNameCval, expected.name);
+ }
+ Assert.assertFalse(cacheExists(productNameCval));
+
+ // If license key is invalid, throw an exception
+ System.setProperty(licenseName, "invalid");
+ try {
+ licenseChecker.validateProduct(productNameCval, "2.1",
+ productTitleCval);
+ Assert.fail();
+ } catch (InvalidCvalException expected) {
+ assertEquals(productNameCval, expected.name);
+ }
+ Assert.assertFalse(cacheExists(productNameCval));
+
+ // Fail if version is bigger
+ System.setProperty(licenseName, VALID_KEY);
+ try {
+ licenseChecker.validateProduct(productNameCval, "3.0",
+ productTitleCval);
+ Assert.fail();
+ } catch (InvalidCvalException expected) {
+ assertEquals(productNameCval, expected.name);
+ assertTrue(expected.getMessage().contains("is not valid"));
+ }
+ Assert.assertFalse(cacheExists(productNameCval));
+
+ // Success if license key and version are valid
+ System.setProperty(licenseName, VALID_KEY);
+ licenseChecker
+ .validateProduct(productNameCval, "2.1", productTitleCval);
+ Assert.assertTrue(cacheExists(productNameCval));
+
+ // Success if license and cache file are valid, although the license
+ // server is offline
+ licenseChecker.setLicenseProvider(unreachableLicenseProvider);
+ licenseChecker
+ .validateProduct(productNameCval, "2.1", productTitleCval);
+ Assert.assertTrue(cacheExists(productNameCval));
+
+ // Fail if license key changes although cache file were validated
+ // previously and it is ok, we are offline
+ try {
+ System.setProperty(licenseName, INVALID_KEY);
+ licenseChecker.validateProduct(productNameCval, "2.1",
+ productTitleCval);
+ Assert.fail();
+ } catch (InvalidCvalException expected) {
+ Assert.fail();
+ } catch (UnreachableCvalServerException expected) {
+ assertEquals(productNameCval, expected.name);
+ }
+ Assert.assertFalse(cacheExists(productNameCval));
+
+ // Fail with unreachable exception if license has never verified and
+ // server is offline
+ try {
+ System.setProperty(licenseName, VALID_KEY);
+ licenseChecker.validateProduct(productNameCval, "2.1",
+ productTitleCval);
+ Assert.fail();
+ } catch (InvalidCvalException expected) {
+ Assert.fail();
+ } catch (UnreachableCvalServerException expected) {
+ assertEquals(productNameCval, expected.name);
+ }
+ Assert.assertFalse(cacheExists(productNameCval));
+
+ // Fail when expired flag comes in the server response, although the
+ // expired is valid.
+ deleteCache(productNameCval);
+ licenseChecker.setLicenseProvider(expiredLicenseProviderWithMessage);
+ try {
+ licenseChecker.validateProduct(productNameCval, "2.1",
+ productTitleCval);
+ Assert.fail();
+ } catch (InvalidCvalException expected) {
+ assertEquals(productNameCval, expected.name);
+ // Check that we use server customized message if it comes
+ Assert.assertTrue(expected.getMessage().contains("Custom"));
+ }
+ Assert.assertTrue(cacheExists(productNameCval));
+
+ // Check an unlimited license
+ deleteCache(productNameCval);
+ licenseChecker.setLicenseProvider(unlimitedLicenseProvider);
+ licenseChecker
+ .validateProduct(productNameCval, "2.1", productTitleCval);
+ Assert.assertTrue(cacheExists(productNameCval));
+
+ // Fail if expired flag does not come, but expired epoch is in the past
+ System.setProperty(licenseName, VALID_KEY);
+ deleteCache(productNameCval);
+ licenseChecker.setLicenseProvider(expiredEpochLicenseProvider);
+ try {
+ licenseChecker.validateProduct(productNameCval, "2.1",
+ productTitleCval);
+ Assert.fail();
+ } catch (InvalidCvalException expected) {
+ assertEquals(productNameCval, expected.name);
+ }
+ Assert.assertTrue(cacheExists(productNameCval));
+
+ deleteCache(productNameCval);
+ licenseChecker.setLicenseProvider(nullVersionLicenseProvider);
+ licenseChecker
+ .validateProduct(productNameCval, "2.1", productTitleCval);
+ Assert.assertTrue(cacheExists(productNameCval));
+ }
+
+ /*
+ * Creates a new .jar file with a MANIFEST.MF with all vaadin license info
+ * attributes set, and add the .jar to the classpath
+ */
+ static void addLicensedJarToClasspath(String productName, String licenseType)
+ throws Exception {
+ // Create a manifest with Vaadin CVAL license
+ Manifest testManifest = new Manifest();
+ testManifest.getMainAttributes().putValue("Manifest-Version", "1.0");
+ testManifest.getMainAttributes().putValue(VAADIN_ADDON_LICENSE,
+ licenseType);
+ testManifest.getMainAttributes().putValue(VAADIN_ADDON_NAME,
+ productName);
+ testManifest.getMainAttributes().putValue(VAADIN_ADDON_TITLE,
+ "Test " + productName);
+ testManifest.getMainAttributes().putValue(VAADIN_ADDON_VERSION, "2");
+
+ // Create a temporary Jar
+ File testJarFile = File.createTempFile("vaadin." + productName, ".jar");
+ testJarFile.deleteOnExit();
+ JarOutputStream target = new JarOutputStream(new FileOutputStream(
+ testJarFile), testManifest);
+ target.close();
+
+ // Add the new jar to our classpath (use reflection)
+ URL url = testJarFile.toURI().toURL();
+ final Method addURL = URLClassLoader.class.getDeclaredMethod("addURL",
+ new Class[] { URL.class });
+ addURL.setAccessible(true);
+ final URLClassLoader urlClassLoader = (URLClassLoader) Thread
+ .currentThread().getContextClassLoader();
+ addURL.invoke(urlClassLoader, new Object[] { url });
+ }
+
+ static boolean cacheExists(String productName) {
+ return cachedPreferences(productName) != null;
+ }
+
+ static String cachedPreferences(String productName) {
+ // ~/Library/Preferences/com.apple.java.util.prefs.plist
+ // .java/.userPrefs/com/google/gwt/dev/shell/prefs.xml
+ // HKEY_CURRENT_USER\SOFTWARE\JavaSoft\Prefs
+ Preferences p = Preferences.userNodeForPackage(CvalInfo.class);
+ return p.get(productName, null);
+ }
+
+ static void saveCache(String productName, String key, Boolean expired,
+ Long expireTs, String type) {
+ String json = responseJson.replace(productNameCval, productName);
+ if (expired != null && expired) {
+ expireTs = System.currentTimeMillis() - GRACE_DAYS_MSECS - 1000;
+ }
+ if (expireTs != null) {
+ json = json.replace("1893511225000", "" + expireTs);
+ }
+ if (key != null) {
+ json = json.replace(VALID_KEY, key);
+ }
+ if (type != null) {
+ json = json.replace("normal", type);
+
+ }
+ cacheLicenseInfo(parseJson(json));
+ }
+
+ static void captureSystemOut() {
+ outContent = new ByteArrayOutputStream();
+ System.setOut(new PrintStream(outContent));
+ }
+
+ static String readSystemOut() {
+ restoreSystemOut();
+ return outContent.toString();
+ }
+
+ static void restoreSystemOut() {
+ System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
+ }
+
+ @Test(expected = FileNotFoundException.class)
+ public void testReadKeyFromFile_NonexistingLicenseFile() throws Exception {
+ licenseChecker.readKeyFromFile(new URL("file:///foobar.baz"), 4);
+ }
+
+ @Test
+ public void testReadKeyFromFile_LicenseFileEmpty() throws Exception {
+ File tmpLicenseFile = File.createTempFile("license", "lic");
+
+ assertNull(licenseChecker.readKeyFromFile(tmpLicenseFile.toURI()
+ .toURL(), 4));
+
+ tmpLicenseFile.delete();
+ }
+
+ @Test
+ public void testReadKeyFromFile_LicenseFileHasSingleUnidentifiedKey()
+ throws Exception {
+ File tmpLicenseFile = File.createTempFile("license", "lic");
+ PrintWriter out = new PrintWriter(tmpLicenseFile);
+ out.println("this-is-a-license");
+ out.close();
+
+ assertEquals("this-is-a-license", licenseChecker.readKeyFromFile(
+ tmpLicenseFile.toURI().toURL(), 4));
+
+ tmpLicenseFile.delete();
+ }
+
+ @Test
+ public void testReadKeyFromFile_LicenseFileHasSingleIdentifiedKey()
+ throws Exception {
+ File tmpLicenseFile = File.createTempFile("license", "lic");
+ PrintWriter out = new PrintWriter(tmpLicenseFile);
+ out.println("4=this-is-a-license");
+ out.close();
+
+ assertEquals("this-is-a-license", licenseChecker.readKeyFromFile(
+ tmpLicenseFile.toURI().toURL(), 4));
+
+ tmpLicenseFile.delete();
+ }
+
+ @Test
+ public void testReadKeyFromFile_LicenseFileHasMultipleKeys()
+ throws Exception {
+ File tmpLicenseFile = File.createTempFile("license", "lic");
+ PrintWriter out = new PrintWriter(tmpLicenseFile);
+ out.println("4=this-is-a-license");
+ out.println("5=this-is-another-license");
+ out.close();
+
+ assertEquals("this-is-a-license", licenseChecker.readKeyFromFile(
+ tmpLicenseFile.toURI().toURL(), 4));
+ assertEquals("this-is-another-license", licenseChecker.readKeyFromFile(
+ tmpLicenseFile.toURI().toURL(), 5));
+
+ tmpLicenseFile.delete();
+ }
+
+ @Test
+ public void testReadKeyFromFile_LicenseFileHasMultipleKeysWithWhitespace()
+ throws Exception {
+ File tmpLicenseFile = File.createTempFile("license", "lic");
+ PrintWriter out = new PrintWriter(tmpLicenseFile);
+ out.println("4 = this-is-a-license");
+ out.println("5 = this-is-another-license");
+ out.close();
+
+ assertEquals("this-is-a-license", licenseChecker.readKeyFromFile(
+ tmpLicenseFile.toURI().toURL(), 4));
+ assertEquals("this-is-another-license", licenseChecker.readKeyFromFile(
+ tmpLicenseFile.toURI().toURL(), 5));
+
+ tmpLicenseFile.delete();
+ }
+
+ @Test
+ public void testReadKeyFromFile_RequestedVersionMissing() throws Exception {
+ File tmpLicenseFile = File.createTempFile("license", "lic");
+ PrintWriter out = new PrintWriter(tmpLicenseFile);
+ out.println("4 = this-is-a-license");
+ out.println("5 = this-is-another-license");
+ out.close();
+
+ assertNull(licenseChecker.readKeyFromFile(tmpLicenseFile.toURI()
+ .toURL(), 3));
+
+ tmpLicenseFile.delete();
+ }
+
+ @Test
+ public void testReadKeyFromFile_FallbackToDefaultKey() throws Exception {
+ File tmpLicenseFile = File.createTempFile("license", "lic");
+ PrintWriter out = new PrintWriter(tmpLicenseFile);
+ out.println("this-is-a-license");
+ out.println("5 = this-is-another-license");
+ out.close();
+
+ assertEquals("this-is-a-license", licenseChecker.readKeyFromFile(
+ tmpLicenseFile.toURI().toURL(), 3));
+ assertEquals("this-is-a-license", licenseChecker.readKeyFromFile(
+ tmpLicenseFile.toURI().toURL(), 4));
+ assertEquals("this-is-another-license", licenseChecker.readKeyFromFile(
+ tmpLicenseFile.toURI().toURL(), 5));
+
+ tmpLicenseFile.delete();
+ }
+
+ @Test
+ public void testReadKeyFromFile_FallbackToDefaultKeyReversed()
+ throws Exception {
+ File tmpLicenseFile = File.createTempFile("license", "lic");
+ PrintWriter out = new PrintWriter(tmpLicenseFile);
+ out.println("5 = this-is-another-license");
+ out.println("this-is-a-license");
+ out.close();
+
+ assertEquals("this-is-a-license", licenseChecker.readKeyFromFile(
+ tmpLicenseFile.toURI().toURL(), 3));
+ assertEquals("this-is-a-license", licenseChecker.readKeyFromFile(
+ tmpLicenseFile.toURI().toURL(), 4));
+ assertEquals("this-is-another-license", licenseChecker.readKeyFromFile(
+ tmpLicenseFile.toURI().toURL(), 5));
+
+ tmpLicenseFile.delete();
+ }
+}