You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by sm...@apache.org on 2020/10/24 19:50:23 UTC

[directory-fortress-core] branch master updated: + checkUser jmeter test

This is an automated email from the ASF dual-hosted git repository.

smckinney pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/directory-fortress-core.git


The following commit(s) were added to refs/heads/master by this push:
     new ca8248a  + checkUser jmeter test
ca8248a is described below

commit ca8248a0d696b29c78b99c4f2ea6adbe673d06be
Author: Shawn McKinney <sm...@symas.com>
AuthorDate: Sat Oct 24 14:50:17 2020 -0500

    + checkUser jmeter test
---
 README.md                                          | 13 ++++
 pom.xml                                            | 52 +++++++++++++
 .../directory/fortress/core/jmeter/CheckUser.java  | 88 ++++++++++++++++++++++
 .../directory/fortress/core/jmeter/UserBase.java   | 23 +++++-
 src/test/jmeter/ftAddUser.jmx                      |  4 +-
 src/test/jmeter/{ftAddUser.jmx => ftCheckUser.jmx} | 21 +++---
 6 files changed, 186 insertions(+), 15 deletions(-)

diff --git a/README.md b/README.md
index 91768a3..e8036a7 100644
--- a/README.md
+++ b/README.md
@@ -781,6 +781,9 @@ ________________________________________________________________________________
  G. Fortress Del User:
   [src/test/jmeter/ftDelUser.jmx](src/test/jmeter/ftDelUser.jmx)
 
+ H. Fortress Check User:
+  [src/test/jmeter/ftCheckUser.jmx](src/test/jmeter/ftCheckUser.jmx)
+
 3. Setting the jmeter parameters.
 
  These settings affect the length, duration, and the number of threads:
@@ -854,6 +857,16 @@ ________________________________________________________________________________
   mvn -Ploadtest-fortress-deluser jmeter:jmeter -Dqualifier=A1 -Dverify=true -Dsleep=30
   ```
 
+ H. Check Users:
+  ```
+  mvn -Ploadtest-fortress-checkuser jmeter:jmeter -Dqualifier=A1 -Dverify=true -Dsize=20
+  ```
+
+  This test performs createSession on users.  It uses runtime arguments to define behavior:
+   * size=20  <-- defines the number of users in the test set. 
+
+
+
   * Same properties as add except for 'ou', which is not used for delete ops
 
 ___________________________________________________________________________________
diff --git a/pom.xml b/pom.xml
index f973555..5a49c23 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1303,7 +1303,59 @@
               </dependency>
             </dependencies>
           </plugin>
+        </plugins>
+      </build>
+    </profile>
 
+    <!-- This profile starts Fortress core checkAccess loadTest -->
+    <!-- To execute: mvn -Ploadtest-fortress-checkuser jmeter:jmeter -->
+    <profile>
+      <id>loadtest-fortress-checkuser</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>com.lazerycode.jmeter</groupId>
+            <artifactId>jmeter-maven-plugin</artifactId>
+            <version>1.10.0</version>
+            <configuration>
+              <overrideRootLogLevel>DEBUG</overrideRootLogLevel>
+              <suppressJMeterOutput>false</suppressJMeterOutput>
+              <testFilesIncluded>
+                <jMeterTestFile>ftCheckUser.jmx</jMeterTestFile>
+              </testFilesIncluded>
+              <propertiesSystem>
+                <version>${project.version}</version>
+                <tenant>${tenant}</tenant>
+                <hostname>${hostname}</hostname>
+                <qualifier>${qualifier}</qualifier>
+                <verify>${verify}</verify>
+                <output>${output}</output>
+                <sleep>${sleep}</sleep>
+                <size>${size}</size>
+              </propertiesSystem>
+            </configuration>
+            <executions>
+              <execution>
+                <id>jmeter-tests</id>
+                <goals>
+                  <goal>jmeter</goal>
+                </goals>
+              </execution>
+            </executions>
+            <dependencies>
+              <dependency>
+                <groupId>org.apache.directory.fortress</groupId>
+                <artifactId>fortress-core</artifactId>
+                <version>${project.version}</version>
+              </dependency>
+              <dependency>
+                <groupId>org.apache.directory.fortress</groupId>
+                <artifactId>fortress-core</artifactId>
+                <type>test-jar</type>
+                <version>${project.version}</version>
+              </dependency>
+            </dependencies>
+          </plugin>
         </plugins>
       </build>
     </profile>
diff --git a/src/test/java/org/apache/directory/fortress/core/jmeter/CheckUser.java b/src/test/java/org/apache/directory/fortress/core/jmeter/CheckUser.java
new file mode 100644
index 0000000..1c9c369
--- /dev/null
+++ b/src/test/java/org/apache/directory/fortress/core/jmeter/CheckUser.java
@@ -0,0 +1,88 @@
+/*
+ *   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.directory.fortress.core.jmeter;
+
+import org.apache.directory.fortress.core.model.Session;
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.directory.fortress.core.model.User;
+
+import static org.junit.Assert.*;
+
+/**
+ * Description of the Class
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class CheckUser extends UserBase
+{
+    private int ctr = 0;
+
+    /**
+     * Description of the Method
+     *
+     * @param samplerContext Description of the Parameter
+     * @return Description of the Return Value
+     */
+    public SampleResult runTest( JavaSamplerContext samplerContext )
+    {
+        String userId  = hostname + '-' + qualifier + '-' + getRandomNumber();
+        SampleResult sampleResult = new SampleResult();
+        try
+        {
+            sampleResult.sampleStart();
+            assertNotNull( accessMgr );
+            User user = new User();
+            user.setUserId( userId );
+            user.setPassword( "secret" );
+            write( "threadid: " + getThreadId() + ", userId: " + userId );
+            LOG.warn( "CheckUser: " + userId );
+            Session session = accessMgr.createSession( user, false );
+            assertNotNull( session );
+            if ( verify )
+            {
+                assertTrue( verify( userId, Op.CHECK ) );
+            }
+            if( sleep > 0 )
+            {
+                try
+                {
+                    Thread.sleep( sleep );
+                }
+                catch (InterruptedException ie)
+                {
+                    Thread.currentThread().interrupt();
+                }
+            }
+            sampleResult.sampleEnd();
+            sampleResult.setBytes(1);
+            sampleResult.setResponseMessage("test completed TID: " + getThreadId() + " UID: " + userId);
+            sampleResult.setSuccessful(true);
+        }
+        catch ( org.apache.directory.fortress.core.SecurityException se )
+        {
+            warn( "ThreadId: " + getThreadId() + ", error running test: " + se );
+            se.printStackTrace();
+            sampleResult.setSuccessful( false );
+        }
+
+        return sampleResult;
+    }
+}
diff --git a/src/test/java/org/apache/directory/fortress/core/jmeter/UserBase.java b/src/test/java/org/apache/directory/fortress/core/jmeter/UserBase.java
index 9f1eaf7..8d96913 100644
--- a/src/test/java/org/apache/directory/fortress/core/jmeter/UserBase.java
+++ b/src/test/java/org/apache/directory/fortress/core/jmeter/UserBase.java
@@ -47,6 +47,7 @@ import static org.junit.Assert.assertNotNull;
  */
 public abstract class UserBase extends AbstractJavaSamplerClient
 {
+    protected AccessMgr accessMgr;
     protected AdminMgr adminMgr;
     protected ReviewMgr reviewMgr;
     protected static final Logger LOG = LoggerFactory.getLogger( UserBase.class );
@@ -59,12 +60,14 @@ public abstract class UserBase extends AbstractJavaSamplerClient
     protected boolean update = false;
     protected String ou = null;
     protected int sleep = 0;
+    protected int size = 0;
     private PrintWriter printWriter;
 
     protected enum Op
     {
         ADD,
-        DEL
+        DEL,
+        CHECK
     }
 
     protected boolean verify( String userId, Op op )
@@ -84,7 +87,7 @@ public abstract class UserBase extends AbstractJavaSamplerClient
         }
         catch ( org.apache.directory.fortress.core.SecurityException se )
         {
-            if( op == Op.ADD )
+            if( op == Op.ADD || op == Op.CHECK )
             {
                 warn( "Failed add check, threadId: " + getThreadId() + ", error reading user: " + se );
                 se.printStackTrace();
@@ -106,6 +109,7 @@ public abstract class UserBase extends AbstractJavaSamplerClient
         System.out.println( message );
         try
         {
+            accessMgr = AccessMgrFactory.createInstance( TestUtils.getContext() );
             adminMgr = AdminMgrFactory.createInstance( TestUtils.getContext() );
             reviewMgr = ReviewMgrFactory.createInstance( TestUtils.getContext() );
         }
@@ -175,6 +179,15 @@ public abstract class UserBase extends AbstractJavaSamplerClient
         {
             sleep = Integer.valueOf(szSleep);
         }
+        String szSize = System.getProperty( "size" );
+        if (StringUtils.isEmpty( szSize ))
+        {
+            szSize = samplerContext.getParameter( "size" );
+        }
+        if (!StringUtils.isEmpty( szSize ))
+        {
+            size = Integer.valueOf(szSize);
+        }
         filename = "operations" + '-' + "thread" + getThreadId() + '-' + hostname + '-' + qualifier + ".txt";
         open();
     }
@@ -253,4 +266,10 @@ public abstract class UserBase extends AbstractJavaSamplerClient
             printWriter.flush();
         }
     }
+
+    protected int getRandomNumber()
+    {
+        int number = (int) ((Math.random() * (size - 1)) + 1);
+        return number;
+    }
 }
diff --git a/src/test/jmeter/ftAddUser.jmx b/src/test/jmeter/ftAddUser.jmx
index 633de05..281aaec 100644
--- a/src/test/jmeter/ftAddUser.jmx
+++ b/src/test/jmeter/ftAddUser.jmx
@@ -45,9 +45,9 @@
         <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
           <boolProp name="LoopController.continue_forever">false</boolProp>
 
-          <stringProp name="LoopController.loops">10</stringProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
         </elementProp>
-        <stringProp name="ThreadGroup.num_threads">2</stringProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
         <stringProp name="ThreadGroup.ramp_time">10</stringProp>
         <boolProp name="ThreadGroup.scheduler">false</boolProp>
         <stringProp name="ThreadGroup.duration"></stringProp>
diff --git a/src/test/jmeter/ftAddUser.jmx b/src/test/jmeter/ftCheckUser.jmx
similarity index 90%
copy from src/test/jmeter/ftAddUser.jmx
copy to src/test/jmeter/ftCheckUser.jmx
index 633de05..ed43cdc 100644
--- a/src/test/jmeter/ftAddUser.jmx
+++ b/src/test/jmeter/ftCheckUser.jmx
@@ -32,7 +32,7 @@
       <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="CSV Data Set Config" enabled="false">
         <stringProp name="delimiter">,</stringProp>
         <stringProp name="fileEncoding"></stringProp>
-        <stringProp name="filename">AddUser.csv</stringProp>
+        <stringProp name="filename">CheckUser.csv</stringProp>
         <boolProp name="quotedData">false</boolProp>
         <boolProp name="recycle">true</boolProp>
         <stringProp name="shareMode">shareMode.all</stringProp>
@@ -40,21 +40,21 @@
         <stringProp name="variableNames"></stringProp>
       </CSVDataSet>
       <hashTree/>
-      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Fortress CreateSession" enabled="true">
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Fortress CheckUser" enabled="true">
         <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
         <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
           <boolProp name="LoopController.continue_forever">false</boolProp>
 
-          <stringProp name="LoopController.loops">10</stringProp>
+          <stringProp name="LoopController.loops">100000</stringProp>
         </elementProp>
-        <stringProp name="ThreadGroup.num_threads">2</stringProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
         <stringProp name="ThreadGroup.ramp_time">10</stringProp>
         <boolProp name="ThreadGroup.scheduler">false</boolProp>
         <stringProp name="ThreadGroup.duration"></stringProp>
         <stringProp name="ThreadGroup.delay"></stringProp>
       </ThreadGroup>
       <hashTree>
-        <JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Fortress CheckAccess" enabled="true">
+        <JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Fortress CheckUser" enabled="true">
           <elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
             <collectionProp name="Arguments.arguments">
               <elementProp name="qualifier" elementType="Argument">
@@ -79,18 +79,17 @@
               </elementProp>
               <elementProp name="sleep" elementType="Argument">
                 <stringProp name="Argument.name">sleep</stringProp>
-                <stringProp name="Argument.value">5</stringProp>
+                <stringProp name="Argument.value">0</stringProp>
                 <stringProp name="Argument.metadata">=</stringProp>
               </elementProp>
-              <elementProp name="ou" elementType="Argument">
-                <stringProp name="Argument.name">ou</stringProp>
-                <!-- Use one from OrgUnitExample.xml -->
-                <stringProp name="Argument.value">uou1</stringProp>
+              <elementProp name="size" elementType="Argument">
+                <stringProp name="Argument.name">size</stringProp>
+                <stringProp name="Argument.value">20</stringProp>
                 <stringProp name="Argument.metadata">=</stringProp>
               </elementProp>
             </collectionProp>
           </elementProp>
-          <stringProp name="classname">org.apache.directory.fortress.core.jmeter.AddUser</stringProp>
+          <stringProp name="classname">org.apache.directory.fortress.core.jmeter.CheckUser</stringProp>
         </JavaSampler>
         <hashTree/>
         <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true">