[cpp-sp] branch main updated: Factor out test impl of SPRequest.

Scott Cantor cantor.2 at osu.edu
Wed Jun 4 22:28:21 UTC 2025


This is an automated email from the git hooks/post-receive script.

scantor pushed a commit to branch main
in repository cpp-sp.

View the commit online:
http://git.shibboleth.net/view/?p=cpp-sp.git;a=commit;h=375e1ded8db394348133907e76ae47eb7d163a0d

The following commit(s) were added to refs/heads/main by this push:
     new 375e1ded Factor out test impl of SPRequest.
375e1ded is described below

commit 375e1ded8db394348133907e76ae47eb7d163a0d
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Wed Jun 4 18:28:13 2025 -0400

    Factor out test impl of SPRequest.
---
 tests/DummyRequest.h                           | 73 ++++++++++++++++++++++++++
 tests/Makefile.am                              |  3 ++
 tests/impl/XMLAccessControlTests.cpp           | 52 ++++++------------
 tests/impl/XMLRequestMapperTests.cpp           | 35 +-----------
 tests/session/impl/MemorySessionCacheTests.cpp | 46 +---------------
 5 files changed, 95 insertions(+), 114 deletions(-)

diff --git a/tests/DummyRequest.h b/tests/DummyRequest.h
new file mode 100644
index 00000000..d04e44ef
--- /dev/null
+++ b/tests/DummyRequest.h
@@ -0,0 +1,73 @@
+/*
+ * 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.
+ */
+
+/**
+ * DummyRequest.h
+ *
+ * Mock SPRequest class for unit tests.
+ */
+
+#include "AbstractSPRequest.h"
+
+#include <map>
+#include <string>
+
+#define DATA_PATH "./data/session/impl/"
+
+namespace shibsp {
+
+    class DummyRequest : public AbstractSPRequest {
+    public:
+        DummyRequest(const char* uri=nullptr) : AbstractSPRequest(SHIBSP_LOGCAT ".DummyRequest"), m_addr("192.168.0.1") {
+            setRequestURI(uri);
+        }
+        const char* getMethod() const { return nullptr; }
+        const char* getScheme() const { return m_scheme.c_str(); }
+        const char* getHostname() const { return m_hostname.c_str(); }
+        int getPort() const { return m_port; }
+        std::string getContentType() const { return ""; }
+        long getContentLength() const { return -1; }
+        const char* getQueryString() const { return m_query.c_str(); }
+        const char* getRequestBody() const { return nullptr; }
+        std::string getHeader(const char* name) const {
+            return m_requestHeaders.find(name) == m_requestHeaders.end() ? "" : m_requestHeaders.find(name)->second;
+        }
+        std::string getRemoteUser() const { return m_user.c_str(); }
+        std::string getRemoteAddr() const { return m_addr.c_str(); }
+        std::string getAuthType() const { return nullptr; }
+        long sendResponse(std::istream&, long status) { return status; }
+        void clearHeader(const char* name) {}
+        void setHeader(const char* name, const char* value) {}
+        void setResponseHeader(const char* name, const char* value, bool replace=false) {
+            HTTPResponse::setResponseHeader(name, value, replace);
+            m_responseHeaders[name] = value ? value : "";
+        }
+        void setRemoteUser(const char*) {}
+        long returnDecline() { return 200; }
+        long returnOK() { return 200; }
+
+        bool isUseHeaders() const {return true;}
+        bool isUseVariables() const { return false; }
+        
+        std::string m_scheme;
+        std::string m_hostname;
+        int m_port;
+        std::string m_query;
+        std::string m_user;
+        std::string m_addr;
+        std::map<std::string,std::string> m_requestHeaders;
+        std::map<std::string,std::string> m_responseHeaders;
+    };
+
+};
\ No newline at end of file
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 6a332cbb..7fb78448 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -9,6 +9,9 @@ shibsptest_CPPFLAGS = \
 shibsptest_CXXFLAGS = \
 	$(AM_CXXFLAGS)
 
+noinst_HEADERS = \
+	DummyRequest.h
+
 shibsptest_SOURCES = \
 	AgentTestSuite.cpp \
 	AgentConfigTests.cpp \
diff --git a/tests/impl/XMLAccessControlTests.cpp b/tests/impl/XMLAccessControlTests.cpp
index 9631e49e..11da2228 100644
--- a/tests/impl/XMLAccessControlTests.cpp
+++ b/tests/impl/XMLAccessControlTests.cpp
@@ -27,6 +27,8 @@
 #include "session/SessionCache.h"
 #include "util/BoostPropertySet.h"
 
+#include "DummyRequest.h"
+
 #ifdef HAVE_CXX14
 # include <shared_mutex>
 #endif
@@ -42,9 +44,6 @@ using namespace std;
 
 namespace {
 
-struct DummyRequestMap : public BoostPropertySet {
-};
-
 /** Open structure for testing manipulation. */
 struct DummySession : public Session, public NoOpBasicLockable {
 public:
@@ -74,34 +73,13 @@ public:
     map<string,DDF> m_attributes;
 };
 
-class DummyRequest : public AbstractSPRequest {
+class MappableDummyRequest : public DummyRequest {
 public:
-    DummyRequest() : AbstractSPRequest(SHIBSP_LOGCAT ".DummyRequest") {}
-    ~DummyRequest() {}
+    MappableDummyRequest() {}
+    ~MappableDummyRequest() {}
     RequestMapper::Settings getRequestSettings() const { return make_pair(&m_map, nullptr); }
-    const char* getMethod() const { return nullptr; }
-    const char* getScheme() const { return nullptr; }
-    const char* getHostname() const { return nullptr; }
-    int getPort() const { return 0; }
-    string getContentType() const { return ""; }
-    long getContentLength() const { return -1; }
-    const char* getQueryString() const { return nullptr; }
-    const char* getRequestBody() const { return nullptr; }
-    string getHeader(const char*) const { return nullptr; }
-    string getRemoteUser() const { return m_user; }
-    string getAuthType() const { return nullptr; }
-    long sendResponse(istream&, long status) { return status; }
-    void clearHeader(const char* name) {}
-    void setHeader(const char*, const char*) {}
-    void setRemoteUser(const char*) {}
-    long returnDecline() { return 200; }
-    long returnOK() { return 200; }
-
-    bool isUseHeaders() const { return true; }
-    bool isUseVariables() const { return false; }
-
-    string m_user;
-    DummyRequestMap m_map;
+
+    BoostPropertySet m_map;
 };
 
 class exceptionCheck {
@@ -207,7 +185,7 @@ BOOST_FIXTURE_TEST_CASE(XMLAccessControl_inline_ValidUserRule, XMLAccessControlF
     shared_lock locker(*acl);
 #endif
 
-    DummyRequest request;
+    MappableDummyRequest request;
     DummySession session;
 
     BOOST_CHECK_EQUAL(acl->authorized(request, nullptr), AccessControl::shib_acl_false);
@@ -230,7 +208,7 @@ BOOST_FIXTURE_TEST_CASE(XMLAccessControl_inline_UserRule, XMLAccessControlFixtur
     shared_lock locker(*acl);
 #endif
 
-    DummyRequest request;
+    MappableDummyRequest request;
     DummySession session;
 
     request.m_user = "smith";
@@ -256,7 +234,7 @@ BOOST_FIXTURE_TEST_CASE(XMLAccessControl_inline_UserRegexRule, XMLAccessControlF
     shared_lock locker(*acl);
 #endif
 
-    DummyRequest request;
+    MappableDummyRequest request;
     DummySession session;
 
     request.m_user = "smith";
@@ -282,7 +260,7 @@ BOOST_FIXTURE_TEST_CASE(XMLAccessControl_inline_ACRule, XMLAccessControlFixture)
     shared_lock locker(*acl);
 #endif
 
-    DummyRequest request;
+    MappableDummyRequest request;
     DummySession session;
 
     DDF ac("Shib-AuthnContext-Class");
@@ -312,7 +290,7 @@ BOOST_FIXTURE_TEST_CASE(XMLAccessControl_inline_AttrRule, XMLAccessControlFixtur
     shared_lock locker(*acl);
 #endif
 
-    DummyRequest request;
+    MappableDummyRequest request;
     DummySession session;
 
     DDF affiliation("affiliation");
@@ -344,7 +322,7 @@ BOOST_FIXTURE_TEST_CASE(XMLAccessControl_external_OR, XMLAccessControlFixture)
     shared_lock locker(*acl);
 #endif
 
-    DummyRequest request;
+    MappableDummyRequest request;
     DummySession session;
 
     request.m_user = "jdoe";
@@ -377,7 +355,7 @@ BOOST_FIXTURE_TEST_CASE(XMLAccessControl_external_AND, XMLAccessControlFixture)
     shared_lock locker(*acl);
 #endif
 
-    DummyRequest request;
+    MappableDummyRequest request;
     DummySession session;
 
     request.m_user = "jdoe";
@@ -407,7 +385,7 @@ BOOST_FIXTURE_TEST_CASE(XMLAccessControl_external_NOT, XMLAccessControlFixture)
     shared_lock locker(*acl);
 #endif
 
-    DummyRequest request;
+    MappableDummyRequest request;
     DummySession session;
 
     DDF affiliation("affiliation");
diff --git a/tests/impl/XMLRequestMapperTests.cpp b/tests/impl/XMLRequestMapperTests.cpp
index d5ecd584..f0b19d25 100644
--- a/tests/impl/XMLRequestMapperTests.cpp
+++ b/tests/impl/XMLRequestMapperTests.cpp
@@ -28,6 +28,8 @@
 #include "session/SessionCache.h"
 #include "util/PropertySet.h"
 
+#include "DummyRequest.h"
+
 #ifdef HAVE_CXX14
 # include <shared_mutex>
 #endif
@@ -73,39 +75,6 @@ public:
     map<string,DDF> m_attributes;
 };
 
-class DummyRequest : public AbstractSPRequest {
-public:
-    DummyRequest(const char* uri=nullptr) : AbstractSPRequest(SHIBSP_LOGCAT ".DummyRequest") {
-        setRequestURI(uri);
-    }
-    const char* getMethod() const { return nullptr; }
-    const char* getScheme() const { return m_scheme.c_str(); }
-    const char* getHostname() const { return m_hostname.c_str(); }
-    int getPort() const { return m_port; }
-    string getContentType() const { return ""; }
-    long getContentLength() const { return -1; }
-    const char* getQueryString() const { return m_query.c_str(); }
-    const char* getRequestBody() const { return nullptr; }
-    string getHeader(const char*) const { return nullptr; }
-    string getRemoteUser() const { return m_user.c_str(); }
-    string getAuthType() const { return nullptr; }
-    long sendResponse(istream&, long status) { return status; }
-    void clearHeader(const char*) {}
-    void setHeader(const char*, const char*) {}
-    void setRemoteUser(const char*) {}
-    long returnDecline() { return 200; }
-    long returnOK() { return 200; }
-
-    bool isUseHeaders() const {return true;}
-    bool isUseVariables() const { return false; }
-
-    string m_scheme;
-    string m_hostname;
-    int m_port;
-    string m_query;
-    string m_user;
-};
-
 class exceptionCheck {
 public:
     exceptionCheck(const string& msg) : m_msg(msg) {}
diff --git a/tests/session/impl/MemorySessionCacheTests.cpp b/tests/session/impl/MemorySessionCacheTests.cpp
index 5a1fe558..a817320f 100644
--- a/tests/session/impl/MemorySessionCacheTests.cpp
+++ b/tests/session/impl/MemorySessionCacheTests.cpp
@@ -18,13 +18,14 @@
  * Unit tests for in-memory SessionCache back-end.
  */
 
-#include "AbstractSPRequest.h"
 #include "Agent.h"
 #include "AgentConfig.h"
 #include "exceptions.h"
 #include "remoting/ddf.h"
 #include "session/SessionCache.h"
 
+#include "DummyRequest.h"
+
 #include <map>
 #include <memory>
 #include <string>
@@ -39,49 +40,6 @@ using namespace std;
 
 namespace {
 
-class DummyRequest : public AbstractSPRequest {
-public:
-    DummyRequest(const char* uri=nullptr) : AbstractSPRequest(SHIBSP_LOGCAT ".DummyRequest"), m_addr("192.168.0.1") {
-        setRequestURI(uri);
-    }
-    const char* getMethod() const { return nullptr; }
-    const char* getScheme() const { return m_scheme.c_str(); }
-    const char* getHostname() const { return m_hostname.c_str(); }
-    int getPort() const { return m_port; }
-    string getContentType() const { return ""; }
-    long getContentLength() const { return -1; }
-    const char* getQueryString() const { return m_query.c_str(); }
-    const char* getRequestBody() const { return nullptr; }
-    string getHeader(const char* name) const {
-        return m_requestHeaders.find(name) == m_requestHeaders.end() ? "" : m_requestHeaders.find(name)->second;
-    }
-    string getRemoteUser() const { return m_user.c_str(); }
-    string getRemoteAddr() const { return m_addr.c_str(); }
-    string getAuthType() const { return nullptr; }
-    long sendResponse(istream&, long status) { return status; }
-    void clearHeader(const char* name) {}
-    void setHeader(const char* name, const char* value) {}
-    void setResponseHeader(const char* name, const char* value, bool replace=false) {
-        HTTPResponse::setResponseHeader(name, value, replace);
-        m_responseHeaders[name] = value ? value : "";
-    }
-    void setRemoteUser(const char*) {}
-    long returnDecline() { return 200; }
-    long returnOK() { return 200; }
-
-    bool isUseHeaders() const {return true;}
-    bool isUseVariables() const { return false; }
-    
-    string m_scheme;
-    string m_hostname;
-    int m_port;
-    string m_query;
-    string m_user;
-    string m_addr;
-    map<string,string> m_requestHeaders;
-    map<string,string> m_responseHeaders;
-};
-
 struct MemoryFixture
 {
     MemoryFixture() : data_path(DATA_PATH) {

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list