blob: 890d24ccf1bb47c0487c6480bca03ee3ab6bbe47 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_WINDOWS_SERVICES_SERVICE_PROGRAM_TEST_SUPPORT_SERVICE_ENVIRONMENT_H_
#define CHROME_WINDOWS_SERVICES_SERVICE_PROGRAM_TEST_SUPPORT_SERVICE_ENVIRONMENT_H_
#include <optional>
#include <string_view>
#include "base/files/file_path.h"
#include "base/win/windows_types.h"
#include "chrome/windows_services/service_program/test_support/scoped_install_service.h"
#include "chrome/windows_services/service_program/test_support/scoped_log_grabber.h"
// Installs a test service for its lifetime.
class ServiceEnvironment {
public:
// Installs the service named `display_name`; stripping spaces from this to
// make its actual service name. `service_exe_name` is the basename of the
// executable hosting the service. It must be in the same directory as the
// executable under test (e.g., the build output directory). `testing_switch`,
// if not empty, will be added to the service's command line. `clsid` and
// `iid` identify the COM class and interface exposed by the service.
ServiceEnvironment(std::wstring_view display_name,
base::FilePath::StringViewType service_exe_name,
std::string_view testing_switch,
const CLSID& clsid,
const IID& iid);
ServiceEnvironment(const ServiceEnvironment&) = delete;
ServiceEnvironment& operator=(const ServiceEnvironment&) = delete;
~ServiceEnvironment();
bool is_valid() const { return service_.has_value(); }
// Sets a callback to be run for each message received from a service process.
// The callback is run with the process ID of the service and the log message.
// The message is not emitted to the test process's stderr if the callback
// returns true.
using LogMessageCallback = ScopedLogGrabber::LogMessageCallback;
void SetLogMessageCallback(ScopedLogGrabber::LogMessageCallback callback);
private:
ScopedLogGrabber log_grabber_;
std::optional<ScopedInstallService> service_;
};
#endif // CHROME_WINDOWS_SERVICES_SERVICE_PROGRAM_TEST_SUPPORT_SERVICE_ENVIRONMENT_H_