summaryrefslogtreecommitdiffstats
path: root/toolkit/components/contentanalysis/tests/gtest
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/contentanalysis/tests/gtest')
-rw-r--r--toolkit/components/contentanalysis/tests/gtest/TestContentAnalysis.cpp257
-rw-r--r--toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisAgent.cpp39
-rw-r--r--toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisMisbehaving.cpp87
-rw-r--r--toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisUtils.cpp24
-rw-r--r--toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisUtils.h (renamed from toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisAgent.h)8
5 files changed, 311 insertions, 104 deletions
diff --git a/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysis.cpp b/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysis.cpp
index cd083a7779..d974ac78db 100644
--- a/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysis.cpp
+++ b/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysis.cpp
@@ -8,13 +8,25 @@
#include "mozilla/Assertions.h"
#include "mozilla/Logging.h"
#include "mozilla/Preferences.h"
+#include "mozilla/SpinEventLoopUntil.h"
+#include "nsComponentManagerUtils.h"
#include "nsNetUtil.h"
+#include "nsIFile.h"
+#include "nsIObserverService.h"
+#include "nsIURI.h"
+#include "nsIURIMutator.h"
#include "ContentAnalysis.h"
+#include "SpecialSystemDirectory.h"
+#include "TestContentAnalysisUtils.h"
#include <processenv.h>
#include <synchapi.h>
+#include <vector>
const char* kAllowUrlPref = "browser.contentanalysis.allow_url_regex_list";
const char* kDenyUrlPref = "browser.contentanalysis.deny_url_regex_list";
+const char* kPipePathNamePref = "browser.contentanalysis.pipe_path_name";
+const char* kIsDLPEnabledPref = "browser.contentanalysis.enabled";
+const char* kTimeoutPref = "browser.contentanalysis.agent_timeout";
using namespace mozilla;
using namespace mozilla::contentanalysis;
@@ -24,6 +36,9 @@ class ContentAnalysisTest : public testing::Test {
ContentAnalysisTest() {
auto* logmodule = LogModule::Get("contentanalysis");
logmodule->SetLevel(LogLevel::Verbose);
+ MOZ_ALWAYS_SUCCEEDS(
+ Preferences::SetString(kPipePathNamePref, mPipeName.get()));
+ MOZ_ALWAYS_SUCCEEDS(Preferences::SetBool(kIsDLPEnabledPref, true));
nsCOMPtr<nsIContentAnalysis> caSvc =
do_GetService("@mozilla.org/contentanalysis;1");
@@ -35,17 +50,39 @@ class ContentAnalysisTest : public testing::Test {
mContentAnalysis->mAllowUrlList = {};
mContentAnalysis->mDenyUrlList = {};
+ MOZ_ALWAYS_SUCCEEDS(mContentAnalysis->TestOnlySetCACmdLineArg(true));
+
MOZ_ALWAYS_SUCCEEDS(Preferences::SetCString(kAllowUrlPref, ""));
MOZ_ALWAYS_SUCCEEDS(Preferences::SetCString(kDenyUrlPref, ""));
+
+ bool isActive = false;
+ MOZ_ALWAYS_SUCCEEDS(mContentAnalysis->GetIsActive(&isActive));
+ EXPECT_TRUE(isActive);
+ }
+
+ // Note that the constructor (and SetUp() method) get called once per test,
+ // not once for the whole fixture. Because Firefox does not currently
+ // reconnect to an agent after the DLP pipe is closed (bug 1888293), we only
+ // want to create the agent once and make sure the same process stays alive
+ // through all of these tests.
+ static void SetUpTestSuite() {
+ GeneratePipeName(L"contentanalysissdk-gtest-", mPipeName);
+ mAgentInfo = LaunchAgentNormal(L"block", mPipeName);
}
+ static void TearDownTestSuite() { mAgentInfo.TerminateProcess(); }
+
void TearDown() override {
mContentAnalysis->mParsedUrlLists = false;
mContentAnalysis->mAllowUrlList = {};
mContentAnalysis->mDenyUrlList = {};
+ MOZ_ALWAYS_SUCCEEDS(mContentAnalysis->TestOnlySetCACmdLineArg(false));
+
MOZ_ALWAYS_SUCCEEDS(Preferences::SetCString(kAllowUrlPref, ""));
MOZ_ALWAYS_SUCCEEDS(Preferences::SetCString(kDenyUrlPref, ""));
+ MOZ_ALWAYS_SUCCEEDS(Preferences::ClearUser(kPipePathNamePref));
+ MOZ_ALWAYS_SUCCEEDS(Preferences::ClearUser(kIsDLPEnabledPref));
}
already_AddRefed<nsIContentAnalysisRequest> CreateRequest(const char* aUrl) {
@@ -62,6 +99,8 @@ class ContentAnalysisTest : public testing::Test {
}
RefPtr<ContentAnalysis> mContentAnalysis;
+ static nsString mPipeName;
+ static MozAgentInfo mAgentInfo;
// Proxies for private members of ContentAnalysis. TEST_F
// creates new subclasses -- they do not inherit `friend`s.
@@ -71,6 +110,8 @@ class ContentAnalysisTest : public testing::Test {
return mContentAnalysis->FilterByUrlLists(aReq);
}
};
+nsString ContentAnalysisTest::mPipeName;
+MozAgentInfo ContentAnalysisTest::mAgentInfo;
TEST_F(ContentAnalysisTest, AllowUrlList) {
MOZ_ALWAYS_SUCCEEDS(
@@ -124,3 +165,219 @@ TEST_F(ContentAnalysisTest, DenyOverridesAllowUrlList) {
CreateRequest("https://example.org/matchme/");
ASSERT_EQ(FilterByUrlLists(car), UrlFilterResult::eDeny);
}
+
+nsCOMPtr<nsIURI> GetExampleDotComURI() {
+ nsCOMPtr<nsIURI> uri;
+ MOZ_ALWAYS_SUCCEEDS(NS_NewURI(getter_AddRefs(uri), "https://example.com"));
+ return uri;
+}
+
+void SendRequestAndExpectResponse(
+ RefPtr<ContentAnalysis> contentAnalysis,
+ const nsCOMPtr<nsIContentAnalysisRequest>& request,
+ Maybe<bool> expectedShouldAllow,
+ Maybe<nsIContentAnalysisResponse::Action> expectedAction) {
+ std::atomic<bool> gotResponse = false;
+ std::atomic<bool> timedOut = false;
+ auto callback = MakeRefPtr<ContentAnalysisCallback>(
+ [&](nsIContentAnalysisResponse* response) {
+ if (expectedShouldAllow.isSome()) {
+ bool shouldAllow = false;
+ MOZ_ALWAYS_SUCCEEDS(response->GetShouldAllowContent(&shouldAllow));
+ EXPECT_EQ(*expectedShouldAllow, shouldAllow);
+ }
+ if (expectedAction.isSome()) {
+ nsIContentAnalysisResponse::Action action;
+ MOZ_ALWAYS_SUCCEEDS(response->GetAction(&action));
+ EXPECT_EQ(*expectedAction, action);
+ }
+ nsCString requestToken, originalRequestToken;
+ MOZ_ALWAYS_SUCCEEDS(response->GetRequestToken(requestToken));
+ MOZ_ALWAYS_SUCCEEDS(request->GetRequestToken(originalRequestToken));
+ EXPECT_EQ(originalRequestToken, requestToken);
+ gotResponse = true;
+ },
+ [&gotResponse](nsresult error) {
+ EXPECT_EQ(NS_OK, error);
+ gotResponse = true;
+ // Make sure that we didn't somehow get passed NS_OK
+ FAIL() << "Got error response";
+ });
+
+ MOZ_ALWAYS_SUCCEEDS(
+ contentAnalysis->AnalyzeContentRequestCallback(request, false, callback));
+ RefPtr<CancelableRunnable> timer =
+ NS_NewCancelableRunnableFunction("Content Analysis timeout", [&] {
+ if (!gotResponse.load()) {
+ timedOut = true;
+ }
+ });
+ NS_DelayedDispatchToCurrentThread(do_AddRef(timer), 10000);
+ mozilla::SpinEventLoopUntil("Waiting for ContentAnalysis result"_ns, [&]() {
+ return gotResponse.load() || timedOut.load();
+ });
+ timer->Cancel();
+ EXPECT_TRUE(gotResponse);
+ EXPECT_FALSE(timedOut);
+}
+
+TEST_F(ContentAnalysisTest, SendAllowedTextToAgent_GetAllowedResponse) {
+ nsCOMPtr<nsIURI> uri = GetExampleDotComURI();
+ nsString allow(L"allow");
+ nsCOMPtr<nsIContentAnalysisRequest> request = new ContentAnalysisRequest(
+ nsIContentAnalysisRequest::AnalysisType::eBulkDataEntry, std::move(allow),
+ false, EmptyCString(), uri,
+ nsIContentAnalysisRequest::OperationType::eClipboard, nullptr);
+
+ SendRequestAndExpectResponse(mContentAnalysis, request, Some(true),
+ Some(nsIContentAnalysisResponse::eAllow));
+}
+
+TEST_F(ContentAnalysisTest, SendBlockedTextToAgent_GetBlockResponse) {
+ nsCOMPtr<nsIURI> uri = GetExampleDotComURI();
+ nsString block(L"block");
+ nsCOMPtr<nsIContentAnalysisRequest> request = new ContentAnalysisRequest(
+ nsIContentAnalysisRequest::AnalysisType::eBulkDataEntry, std::move(block),
+ false, EmptyCString(), uri,
+ nsIContentAnalysisRequest::OperationType::eClipboard, nullptr);
+
+ SendRequestAndExpectResponse(mContentAnalysis, request, Some(false),
+ Some(nsIContentAnalysisResponse::eBlock));
+}
+
+class RawRequestObserver final : public nsIObserver {
+ public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIOBSERVER
+ RawRequestObserver() {}
+
+ const std::vector<content_analysis::sdk::ContentAnalysisRequest>&
+ GetRequests() {
+ return mRequests;
+ }
+
+ private:
+ ~RawRequestObserver() = default;
+ std::vector<content_analysis::sdk::ContentAnalysisRequest> mRequests;
+};
+
+NS_IMPL_ISUPPORTS(RawRequestObserver, nsIObserver);
+
+NS_IMETHODIMP RawRequestObserver::Observe(nsISupports* aSubject,
+ const char* aTopic,
+ const char16_t* aData) {
+ std::wstring dataWideString(reinterpret_cast<const wchar_t*>(aData));
+ std::vector<uint8_t> dataVector(dataWideString.size());
+ for (size_t i = 0; i < dataWideString.size(); ++i) {
+ // Since this data is really bytes and not a null-terminated string, the
+ // calling code adds 0xFF00 to every member to ensure there are no 0 values.
+ dataVector[i] = static_cast<uint8_t>(dataWideString[i] - 0xFF00);
+ }
+ content_analysis::sdk::ContentAnalysisRequest request;
+ EXPECT_TRUE(request.ParseFromArray(dataVector.data(), dataVector.size()));
+ mRequests.push_back(std::move(request));
+ return NS_OK;
+}
+
+TEST_F(ContentAnalysisTest, CheckRawRequestWithText) {
+ MOZ_ALWAYS_SUCCEEDS(Preferences::SetInt(kTimeoutPref, 65));
+ nsCOMPtr<nsIURI> uri = GetExampleDotComURI();
+ nsString allow(L"allow");
+ nsCOMPtr<nsIContentAnalysisRequest> request = new ContentAnalysisRequest(
+ nsIContentAnalysisRequest::AnalysisType::eBulkDataEntry, std::move(allow),
+ false, EmptyCString(), uri,
+ nsIContentAnalysisRequest::OperationType::eClipboard, nullptr);
+ nsCOMPtr<nsIObserverService> obsServ =
+ mozilla::services::GetObserverService();
+ auto rawRequestObserver = MakeRefPtr<RawRequestObserver>();
+ MOZ_ALWAYS_SUCCEEDS(
+ obsServ->AddObserver(rawRequestObserver, "dlp-request-sent-raw", false));
+ time_t now = time(nullptr);
+
+ SendRequestAndExpectResponse(mContentAnalysis, request, Nothing(), Nothing());
+ auto requests = rawRequestObserver->GetRequests();
+ EXPECT_EQ(static_cast<size_t>(1), requests.size());
+ time_t t = requests[0].expires_at();
+ time_t secs_remaining = t - now;
+ // There should be around 65 seconds remaining
+ EXPECT_LE(abs(secs_remaining - 65), 2);
+ const auto& request_url = requests[0].request_data().url();
+ EXPECT_EQ(uri->GetSpecOrDefault(),
+ nsCString(request_url.data(), request_url.size()));
+ nsCString request_user_action_id(requests[0].user_action_id().data(),
+ requests[0].user_action_id().size());
+ // The user_action_id has a GUID appended to the end, just make sure the
+ // beginning is right.
+ request_user_action_id.Truncate(8);
+ EXPECT_EQ(nsCString("Firefox "), request_user_action_id);
+ const auto& request_text = requests[0].text_content();
+ EXPECT_EQ(nsCString("allow"),
+ nsCString(request_text.data(), request_text.size()));
+
+ MOZ_ALWAYS_SUCCEEDS(
+ obsServ->RemoveObserver(rawRequestObserver, "dlp-request-sent-raw"));
+ MOZ_ALWAYS_SUCCEEDS(Preferences::ClearUser(kTimeoutPref));
+}
+
+TEST_F(ContentAnalysisTest, CheckRawRequestWithFile) {
+ nsCOMPtr<nsIURI> uri = GetExampleDotComURI();
+ nsCOMPtr<nsIFile> file;
+ MOZ_ALWAYS_SUCCEEDS(GetSpecialSystemDirectory(OS_CurrentWorkingDirectory,
+ getter_AddRefs(file)));
+ nsString allowRelativePath(L"allowedFile.txt");
+ MOZ_ALWAYS_SUCCEEDS(file->AppendRelativePath(allowRelativePath));
+ nsString allowPath;
+ MOZ_ALWAYS_SUCCEEDS(file->GetPath(allowPath));
+
+ nsCOMPtr<nsIContentAnalysisRequest> request = new ContentAnalysisRequest(
+ nsIContentAnalysisRequest::AnalysisType::eBulkDataEntry, allowPath, true,
+ EmptyCString(), uri, nsIContentAnalysisRequest::OperationType::eClipboard,
+ nullptr);
+ nsCOMPtr<nsIObserverService> obsServ =
+ mozilla::services::GetObserverService();
+ auto rawRequestObserver = MakeRefPtr<RawRequestObserver>();
+ MOZ_ALWAYS_SUCCEEDS(
+ obsServ->AddObserver(rawRequestObserver, "dlp-request-sent-raw", false));
+
+ SendRequestAndExpectResponse(mContentAnalysis, request, Nothing(), Nothing());
+ auto requests = rawRequestObserver->GetRequests();
+ EXPECT_EQ(static_cast<size_t>(1), requests.size());
+ const auto& request_url = requests[0].request_data().url();
+ EXPECT_EQ(uri->GetSpecOrDefault(),
+ nsCString(request_url.data(), request_url.size()));
+ nsCString request_user_action_id(requests[0].user_action_id().data(),
+ requests[0].user_action_id().size());
+ // The user_action_id has a GUID appended to the end, just make sure the
+ // beginning is right.
+ request_user_action_id.Truncate(8);
+ EXPECT_EQ(nsCString("Firefox "), request_user_action_id);
+ const auto& request_file_path = requests[0].file_path();
+ EXPECT_EQ(NS_ConvertUTF16toUTF8(allowPath),
+ nsCString(request_file_path.data(), request_file_path.size()));
+
+ MOZ_ALWAYS_SUCCEEDS(
+ obsServ->RemoveObserver(rawRequestObserver, "dlp-request-sent-raw"));
+}
+
+TEST_F(ContentAnalysisTest, CheckTwoRequestsHaveSameUserActionId) {
+ nsCOMPtr<nsIURI> uri = GetExampleDotComURI();
+ nsString allow(L"allow");
+ nsCOMPtr<nsIContentAnalysisRequest> request = new ContentAnalysisRequest(
+ nsIContentAnalysisRequest::AnalysisType::eBulkDataEntry, std::move(allow),
+ false, EmptyCString(), uri,
+ nsIContentAnalysisRequest::OperationType::eClipboard, nullptr);
+ nsCOMPtr<nsIObserverService> obsServ =
+ mozilla::services::GetObserverService();
+ auto rawRequestObserver = MakeRefPtr<RawRequestObserver>();
+ MOZ_ALWAYS_SUCCEEDS(
+ obsServ->AddObserver(rawRequestObserver, "dlp-request-sent-raw", false));
+
+ SendRequestAndExpectResponse(mContentAnalysis, request, Nothing(), Nothing());
+ SendRequestAndExpectResponse(mContentAnalysis, request, Nothing(), Nothing());
+ auto requests = rawRequestObserver->GetRequests();
+ EXPECT_EQ(static_cast<size_t>(2), requests.size());
+ EXPECT_EQ(requests[0].user_action_id(), requests[1].user_action_id());
+
+ MOZ_ALWAYS_SUCCEEDS(
+ obsServ->RemoveObserver(rawRequestObserver, "dlp-request-sent-raw"));
+}
diff --git a/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisAgent.cpp b/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisAgent.cpp
index 5b2b76b963..d7a41cc5ff 100644
--- a/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisAgent.cpp
+++ b/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisAgent.cpp
@@ -8,29 +8,12 @@
#include "mozilla/Assertions.h"
#include "mozilla/CmdLineAndEnvUtils.h"
#include "content_analysis/sdk/analysis_client.h"
-#include "TestContentAnalysisAgent.h"
+#include "TestContentAnalysisUtils.h"
#include <processenv.h>
#include <synchapi.h>
using namespace content_analysis::sdk;
-MozAgentInfo LaunchAgentNormal(const wchar_t* aToBlock) {
- nsString cmdLineArguments;
- if (aToBlock && aToBlock[0] != 0) {
- cmdLineArguments.Append(L" --toblock=.*");
- cmdLineArguments.Append(aToBlock);
- cmdLineArguments.Append(L".*");
- }
- cmdLineArguments.Append(L" --user");
- cmdLineArguments.Append(L" --path=");
- nsString pipeName;
- GeneratePipeName(L"contentanalysissdk-gtest-", pipeName);
- cmdLineArguments.Append(pipeName);
- MozAgentInfo agentInfo;
- LaunchAgentWithCommandLineArguments(cmdLineArguments, pipeName, agentInfo);
- return agentInfo;
-}
-
TEST(ContentAnalysisAgent, TextShouldNotBeBlocked)
{
auto MozAgentInfo = LaunchAgentNormal(L"block");
@@ -49,10 +32,7 @@ TEST(ContentAnalysisAgent, TextShouldNotBeBlocked)
response.results().Get(0).status());
ASSERT_EQ(0, response.results().Get(0).triggered_rules_size());
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisAgent, TextShouldBeBlocked)
@@ -75,10 +55,7 @@ TEST(ContentAnalysisAgent, TextShouldBeBlocked)
ASSERT_EQ(ContentAnalysisResponse_Result_TriggeredRule_Action_BLOCK,
response.results().Get(0).triggered_rules(0).action());
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisAgent, FileShouldNotBeBlocked)
@@ -99,10 +76,7 @@ TEST(ContentAnalysisAgent, FileShouldNotBeBlocked)
response.results().Get(0).status());
ASSERT_EQ(0, response.results().Get(0).triggered_rules_size());
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisAgent, FileShouldBeBlocked)
@@ -125,8 +99,5 @@ TEST(ContentAnalysisAgent, FileShouldBeBlocked)
ASSERT_EQ(ContentAnalysisResponse_Result_TriggeredRule_Action_BLOCK,
response.results().Get(0).triggered_rules(0).action());
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
diff --git a/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisMisbehaving.cpp b/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisMisbehaving.cpp
index 7c944ed6e3..a120a82f7c 100644
--- a/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisMisbehaving.cpp
+++ b/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisMisbehaving.cpp
@@ -8,7 +8,7 @@
#include "mozilla/Assertions.h"
#include "mozilla/CmdLineAndEnvUtils.h"
#include "content_analysis/sdk/analysis_client.h"
-#include "TestContentAnalysisAgent.h"
+#include "TestContentAnalysisUtils.h"
#include <processenv.h>
#include <synchapi.h>
#include <windows.h>
@@ -70,10 +70,7 @@ TEST(ContentAnalysisMisbehaving, InvalidUtf8StringStartByteIsContinuationByte)
// or invalid memory access or something.
ASSERT_STREQ("\x80\x41\x41\x41", response.request_token().c_str());
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving,
@@ -95,10 +92,7 @@ TEST(ContentAnalysisMisbehaving,
// or invalid memory access or something.
ASSERT_STREQ("\x41\xf0\x90\x8d", response.request_token().c_str());
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving, InvalidUtf8StringMultibyteSequenceTooShort)
@@ -119,10 +113,7 @@ TEST(ContentAnalysisMisbehaving, InvalidUtf8StringMultibyteSequenceTooShort)
// or invalid memory access or something.
ASSERT_STREQ("\xf0\x90\x8d\x41", response.request_token().c_str());
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving, InvalidUtf8StringDecodesToInvalidCodePoint)
@@ -143,10 +134,7 @@ TEST(ContentAnalysisMisbehaving, InvalidUtf8StringDecodesToInvalidCodePoint)
// or invalid memory access or something.
ASSERT_STREQ("\xf7\xbf\xbf\xbf", response.request_token().c_str());
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving, InvalidUtf8StringOverlongEncoding)
@@ -167,10 +155,7 @@ TEST(ContentAnalysisMisbehaving, InvalidUtf8StringOverlongEncoding)
// or invalid memory access or something.
ASSERT_STREQ("\xf0\x82\x82\xac", response.request_token().c_str());
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving, StringWithEmbeddedNull)
@@ -188,10 +173,7 @@ TEST(ContentAnalysisMisbehaving, StringWithEmbeddedNull)
std::string expected("\x41\x00\x41");
ASSERT_EQ(expected, response.request_token());
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving, ZeroResults)
@@ -208,10 +190,7 @@ TEST(ContentAnalysisMisbehaving, ZeroResults)
ASSERT_EQ(0, MozAgentInfo.client->Send(request, &response));
ASSERT_EQ(0, response.results().size());
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving, ResultWithInvalidStatus)
@@ -232,10 +211,7 @@ TEST(ContentAnalysisMisbehaving, ResultWithInvalidStatus)
// just make sure we can get the value without throwing
ASSERT_GE(static_cast<int>(response.results(0).status()), 0);
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving, MessageTruncatedInMiddleOfString)
@@ -252,10 +228,7 @@ TEST(ContentAnalysisMisbehaving, MessageTruncatedInMiddleOfString)
// The response is an invalid serialization of protobuf, so this should fail
ASSERT_EQ(-1, MozAgentInfo.client->Send(request, &response));
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving, MessageWithInvalidWireType)
@@ -271,10 +244,7 @@ TEST(ContentAnalysisMisbehaving, MessageWithInvalidWireType)
// The response is an invalid serialization of protobuf, so this should fail
ASSERT_EQ(-1, MozAgentInfo.client->Send(request, &response));
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving, MessageWithUnusedFieldNumber)
@@ -292,10 +262,7 @@ TEST(ContentAnalysisMisbehaving, MessageWithUnusedFieldNumber)
// just make sure we can get a value without throwing
ASSERT_STREQ("", response.request_token().c_str());
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving, MessageWithWrongStringWireType)
@@ -311,10 +278,7 @@ TEST(ContentAnalysisMisbehaving, MessageWithWrongStringWireType)
// The response is an invalid serialization of protobuf, so this should fail
ASSERT_EQ(-1, MozAgentInfo.client->Send(request, &response));
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving, MessageWithZeroTag)
@@ -330,10 +294,7 @@ TEST(ContentAnalysisMisbehaving, MessageWithZeroTag)
// The response is an invalid serialization of protobuf, so this should fail
ASSERT_EQ(-1, MozAgentInfo.client->Send(request, &response));
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving, MessageWithZeroFieldButNonzeroWireType)
@@ -350,10 +311,7 @@ TEST(ContentAnalysisMisbehaving, MessageWithZeroFieldButNonzeroWireType)
// The response is an invalid serialization of protobuf, so this should fail
ASSERT_EQ(-1, MozAgentInfo.client->Send(request, &response));
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving, MessageWithGroupEnd)
@@ -370,10 +328,7 @@ TEST(ContentAnalysisMisbehaving, MessageWithGroupEnd)
// The response is an invalid serialization of protobuf, so this should fail
ASSERT_EQ(-1, MozAgentInfo.client->Send(request, &response));
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving, MessageTruncatedInMiddleOfVarint)
@@ -390,10 +345,7 @@ TEST(ContentAnalysisMisbehaving, MessageTruncatedInMiddleOfVarint)
// The response is an invalid serialization of protobuf, so this should fail
ASSERT_EQ(-1, MozAgentInfo.client->Send(request, &response));
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
TEST(ContentAnalysisMisbehaving, MessageTruncatedInMiddleOfTag)
@@ -409,8 +361,5 @@ TEST(ContentAnalysisMisbehaving, MessageTruncatedInMiddleOfTag)
// The response is an invalid serialization of protobuf, so this should fail
ASSERT_EQ(-1, MozAgentInfo.client->Send(request, &response));
- BOOL terminateResult =
- ::TerminateProcess(MozAgentInfo.processInfo.hProcess, 0);
- ASSERT_NE(FALSE, terminateResult)
- << "Failed to terminate content_analysis_sdk_agent process";
+ MozAgentInfo.TerminateProcess();
}
diff --git a/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisUtils.cpp b/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisUtils.cpp
index 0e14de6b81..8bcfe018ee 100644
--- a/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisUtils.cpp
+++ b/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisUtils.cpp
@@ -3,13 +3,35 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-#include "TestContentAnalysisAgent.h"
+#include "TestContentAnalysisUtils.h"
#include <combaseapi.h>
#include <pathcch.h>
#include <shlwapi.h>
#include <rpc.h>
#include <windows.h>
+MozAgentInfo LaunchAgentNormal(const wchar_t* aToBlock) {
+ nsString pipeName;
+ GeneratePipeName(L"contentanalysissdk-gtest-", pipeName);
+ return LaunchAgentNormal(aToBlock, pipeName);
+}
+
+MozAgentInfo LaunchAgentNormal(const wchar_t* aToBlock,
+ const nsString& pipeName) {
+ nsString cmdLineArguments;
+ if (aToBlock && aToBlock[0] != 0) {
+ cmdLineArguments.Append(L" --toblock=.*");
+ cmdLineArguments.Append(aToBlock);
+ cmdLineArguments.Append(L".*");
+ }
+ cmdLineArguments.Append(L" --user");
+ cmdLineArguments.Append(L" --path=");
+ cmdLineArguments.Append(pipeName);
+ MozAgentInfo agentInfo;
+ LaunchAgentWithCommandLineArguments(cmdLineArguments, pipeName, agentInfo);
+ return agentInfo;
+}
+
void GeneratePipeName(const wchar_t* prefix, nsString& pipeName) {
pipeName = u""_ns;
pipeName.Append(prefix);
diff --git a/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisAgent.h b/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisUtils.h
index 9e31036262..fd437de3f7 100644
--- a/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisAgent.h
+++ b/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisUtils.h
@@ -15,10 +15,18 @@
struct MozAgentInfo {
PROCESS_INFORMATION processInfo;
std::unique_ptr<content_analysis::sdk::Client> client;
+ void TerminateProcess() {
+ BOOL terminateResult = ::TerminateProcess(processInfo.hProcess, 0);
+ ASSERT_NE(FALSE, terminateResult)
+ << "Failed to terminate content_analysis_sdk_agent process";
+ }
};
void GeneratePipeName(const wchar_t* prefix, nsString& pipeName);
void LaunchAgentWithCommandLineArguments(const nsString& cmdLineArguments,
const nsString& pipeName,
MozAgentInfo& agentInfo);
+MozAgentInfo LaunchAgentNormal(const wchar_t* aToBlock);
+MozAgentInfo LaunchAgentNormal(const wchar_t* aToBlock,
+ const nsString& pipeName);
#endif