summaryrefslogtreecommitdiffstats
path: root/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisUtils.cpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisUtils.cpp
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisUtils.cpp')
-rw-r--r--toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisUtils.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisUtils.cpp b/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisUtils.cpp
new file mode 100644
index 0000000000..fc0cca5acd
--- /dev/null
+++ b/toolkit/components/contentanalysis/tests/gtest/TestContentAnalysisUtils.cpp
@@ -0,0 +1,75 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * 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 "TestContentAnalysis.h"
+#include <combaseapi.h>
+#include <pathcch.h>
+#include <shlwapi.h>
+#include <rpc.h>
+#include <windows.h>
+
+void GeneratePipeName(const wchar_t* prefix, nsString& pipeName) {
+ pipeName = u""_ns;
+ pipeName.Append(prefix);
+ UUID uuid;
+ ASSERT_EQ(RPC_S_OK, UuidCreate(&uuid));
+ // 39 == length of a UUID string including braces and NUL.
+ wchar_t guidBuf[39] = {};
+ ASSERT_EQ(39, StringFromGUID2(uuid, guidBuf, 39));
+ // omit opening and closing braces (and trailing null)
+ pipeName.Append(&guidBuf[1], 36);
+}
+
+void LaunchAgentWithCommandLineArguments(const nsString& cmdLineArguments,
+ const nsString& pipeName,
+ MozAgentInfo& agentInfo) {
+ wchar_t progName[MAX_PATH] = {};
+ // content_analysis_sdk_agent.exe is either next to firefox.exe (for local
+ // builds), or in ../../tests/bin/ (for try/treeherder builds)
+ DWORD nameSize = ::GetModuleFileNameW(nullptr, progName, MAX_PATH);
+ ASSERT_NE(DWORD{0}, nameSize);
+ ASSERT_EQ(S_OK, PathCchRemoveFileSpec(progName, nameSize));
+ wchar_t normalizedPath[MAX_PATH] = {};
+ nsString test1 = nsString(progName) + u"\\content_analysis_sdk_agent.exe"_ns;
+ ASSERT_EQ(S_OK, PathCchCanonicalize(normalizedPath, MAX_PATH, test1.get()));
+ nsString agentPath;
+ if (::PathFileExistsW(normalizedPath)) {
+ agentPath = nsString(normalizedPath);
+ }
+ if (agentPath.IsEmpty()) {
+ nsString unNormalizedPath =
+ nsString(progName) +
+ u"\\..\\..\\tests\\bin\\content_analysis_sdk_agent.exe"_ns;
+ ASSERT_EQ(S_OK, PathCchCanonicalize(normalizedPath, MAX_PATH,
+ unNormalizedPath.get()));
+ if (::PathFileExistsW(normalizedPath)) {
+ agentPath = nsString(normalizedPath);
+ }
+ }
+ ASSERT_FALSE(agentPath.IsEmpty());
+ nsString localCmdLine = nsString(agentPath) + u" "_ns + cmdLineArguments;
+ STARTUPINFOW startupInfo = {sizeof(startupInfo)};
+ PROCESS_INFORMATION processInfo;
+ BOOL ok =
+ ::CreateProcessW(nullptr, localCmdLine.get(), nullptr, nullptr, FALSE, 0,
+ nullptr, nullptr, &startupInfo, &processInfo);
+ // The documentation for CreateProcessW() says that any non-zero value is a
+ // success
+ if (!ok) {
+ // Show the last error
+ ASSERT_EQ(0UL, GetLastError())
+ << "Failed to launch content_analysis_sdk_agent";
+ }
+ // Allow time for the agent to set up the pipe
+ ::Sleep(2000);
+ content_analysis::sdk::Client::Config config;
+ config.name = NS_ConvertUTF16toUTF8(pipeName);
+ config.user_specific = true;
+ auto clientPtr = content_analysis::sdk::Client::Create(config);
+ ASSERT_NE(nullptr, clientPtr.get());
+
+ agentInfo.processInfo = processInfo;
+ agentInfo.client = std::move(clientPtr);
+}