Author: bdelacretaz
Date: Wed Dec  3 07:17:50 2008
New Revision: 722928

URL: http://svn.apache.org/viewvc?rev=722928&view=rev
Log:
SLING-734 - StopAndChangeBundlesTest and StopAndRestartTest added, jcrinstall 
stress tests

Added:
    
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/StopAndChangeBundlesTest.java
   (with props)
    
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/StopAndRestartTest.java
   (with props)
Modified:
    
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/JcrinstallTestBase.java

Modified: 
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/JcrinstallTestBase.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/JcrinstallTestBase.java?rev=722928&r1=722927&r2=722928&view=diff
==============================================================================
--- 
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/JcrinstallTestBase.java
 (original)
+++ 
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/JcrinstallTestBase.java
 Wed Dec  3 07:17:50 2008
@@ -24,6 +24,7 @@
 import java.util.Properties;
 import java.util.Set;
 
+import org.apache.commons.httpclient.methods.PostMethod;
 import org.apache.sling.commons.testing.integration.HttpTestBase;
 import org.apache.sling.jcr.jcrinstall.integrationtest.util.BundleCloner;
 import org.osgi.framework.Bundle;
@@ -61,9 +62,19 @@
                super.setUp();
                scaleFactor = requireIntProperty(SCALE_FACTOR_PROP);
                defaultBundlesTimeout = 
requireIntProperty(DEFAULT_TIMEOUT_PROP);
+               enableJcrinstallService(true);
     }
     
-    protected int requireIntProperty(String systemPropertyKey) throws 
Exception {
+    @Override
+       protected void tearDown() throws Exception {
+               // TODO Auto-generated method stub
+               super.tearDown();
+               enableJcrinstallService(true);
+       }
+
+
+
+       protected int requireIntProperty(String systemPropertyKey) throws 
Exception {
        final String s = System.getProperty(systemPropertyKey);
        if(s == null) {
                throw new Exception("Missing system property '" + 
systemPropertyKey + "'");
@@ -77,17 +88,31 @@
        final long start = System.currentTimeMillis();
        final long timeout = start + timeoutSeconds * 1000L;
        int count = 0;
+       int lastCount = -1;
        while(System.currentTimeMillis() < timeout) {
                count = getActiveBundlesCount();
-               if(count == expectedCount) {
+               if(count != lastCount) {
+                       // continue until the count is stable for at least one 
second
+                       lastCount = count;
+                       sleep(1000);
+                       continue;
+               } else if(count == expectedCount) {
                        return;
                }
+               sleep(500);
        }
        final long delta = System.currentTimeMillis() - start;
        fail(message + ": expected " + expectedCount + " active bundles, found 
" + count
                        + " after waiting " + delta / 1000.0 + " seconds");
     }
     
+    protected void sleep(long millis) {
+       try {
+               Thread.sleep(millis);
+       } catch(InterruptedException ignore) {
+       }
+    }
+    
     protected int getActiveBundlesCount() throws IOException {
        final String key = "bundles.in.state." + Bundle.ACTIVE;
        final Properties props = getJcrInstallProperties();
@@ -98,6 +123,22 @@
        return result;
     }
     
+    protected boolean getJcrinstallServiceEnabled() throws IOException {
+       final Properties props = getJcrInstallProperties();
+       return "true".equals(props.get("jcrinstall.enabled"));
+    }
+    
+    protected void enableJcrinstallService(boolean enable) throws IOException {
+       if(enable != getJcrinstallServiceEnabled()) {
+            final PostMethod post = new PostMethod(HTTP_BASE_URL + 
JCRINSTALL_STATUS_PATH);
+            post.setFollowRedirects(false);
+            post.addParameter("enabled", String.valueOf(enable));
+            final int status = httpClient.executeMethod(post);
+            assertEquals("Expected status 200 in enableJcrinstallService", 
200, status);
+            assertEquals("Expected jcrinstall.enabled to be " + enable, 
enable, getJcrinstallServiceEnabled());
+       }
+    }
+    
     /** Return the Properties found at /system/sling/jcrinstall */ 
     protected Properties getJcrInstallProperties() throws IOException {
        final String content = getContent(HTTP_BASE_URL + 
JCRINSTALL_STATUS_PATH, CONTENT_TYPE_PLAIN);

Added: 
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/StopAndChangeBundlesTest.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/StopAndChangeBundlesTest.java?rev=722928&view=auto
==============================================================================
--- 
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/StopAndChangeBundlesTest.java
 (added)
+++ 
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/StopAndChangeBundlesTest.java
 Wed Dec  3 07:17:50 2008
@@ -0,0 +1,76 @@
+/*
+ * 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.apache.sling.jcr.jcrinstall.integrationtest;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/** Test replacing bundles while jcrinstall is disabled
+ */
+public class StopAndChangeBundlesTest extends JcrinstallTestBase {
+       
+       public void testStopAndRestart() throws Exception {
+               final int activeBeforeTest = getActiveBundlesCount();
+               final List<String> installed = new LinkedList<String>();
+               
+               final int nBundlesA = 7 * scaleFactor;
+               final int nBundlesB = 13 * scaleFactor;
+               
+               assertActiveBundleCount("before adding bundles", 
+                               activeBeforeTest, defaultBundlesTimeout);
+               
+               // Add a first set of bundles A
+               for(int i=0 ; i < nBundlesA; i++) {
+                       installed.add(installClonedBundle(null, null));
+               }
+               
+               // And check that they all start
+               assertActiveBundleCount("after adding bundles", 
+                               activeBeforeTest + nBundlesA, 
defaultBundlesTimeout);
+               
+               // Disable jcrinstall (to simulate repository going away),
+               // delete set A and add another set of bundles B
+               enableJcrinstallService(false);
+               
+               for(String path : installed) {
+                       removeClonedBundle(path);
+               }
+               installed.clear();
+               
+               for(int i=0 ; i < nBundlesB; i++) {
+                       installed.add(installClonedBundle(null, null));
+               }
+               
+               // Before reactivating, bundles count must be the initial count,
+               // as jcrinstall brings the start level down
+               assertActiveBundleCount("after replacing bundles", 
+                               activeBeforeTest, defaultBundlesTimeout);
+               
+               // Re-enable and verify that only original bundles + set B are 
active
+               enableJcrinstallService(true);
+               assertActiveBundleCount("after re-enabling jcrinstall", 
+                               activeBeforeTest + nBundlesB, 
defaultBundlesTimeout);
+               
+               // Remove everything and check
+               for(String path : installed) {
+                       removeClonedBundle(path);
+               }
+               
+               assertActiveBundleCount("after removing all added bundles", 
+                               activeBeforeTest, defaultBundlesTimeout);
+       }
+}

Propchange: 
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/StopAndChangeBundlesTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/StopAndChangeBundlesTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: 
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/StopAndRestartTest.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/StopAndRestartTest.java?rev=722928&view=auto
==============================================================================
--- 
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/StopAndRestartTest.java
 (added)
+++ 
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/StopAndRestartTest.java
 Wed Dec  3 07:17:50 2008
@@ -0,0 +1,56 @@
+/*
+ * 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.apache.sling.jcr.jcrinstall.integrationtest;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/** Verify that stopping and restarting jcrinstall (simulating a disappearing
+ *     repository) works as expected.
+ */
+public class StopAndRestartTest extends JcrinstallTestBase {
+       
+       public void testStopAndRestart() throws Exception {
+               final int activeBeforeTest = getActiveBundlesCount();
+               final List<String> installed = new LinkedList<String>();
+               
+               final int nBundles = 10 * scaleFactor;
+               for(int i=0 ; i < nBundles; i++) {
+                       installed.add(installClonedBundle(null, null));
+               }
+               
+               assertActiveBundleCount("after adding bundles", 
+                               activeBeforeTest + nBundles, 
defaultBundlesTimeout);
+               
+               enableJcrinstallService(false);
+               
+               assertActiveBundleCount("after disabling jcrinstall", 
+                               activeBeforeTest, defaultBundlesTimeout);
+               
+               enableJcrinstallService(true);
+               
+               assertActiveBundleCount("after re-enabling jcrinstall", 
+                               activeBeforeTest + nBundles, 
defaultBundlesTimeout);
+               
+               for(String path : installed) {
+                       removeClonedBundle(path);
+               }
+               
+               assertActiveBundleCount("after removing added bundles", 
+                               activeBeforeTest, defaultBundlesTimeout);
+       }
+}

Propchange: 
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/StopAndRestartTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/StopAndRestartTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL


Reply via email to