blob: 65b4adf478ba497d1f3795c0e968ba8577e45780 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_ASH_ASSISTANT_TEST_SUPPORT_FAKE_S3_SERVER_H_
#define CHROME_BROWSER_UI_ASH_ASSISTANT_TEST_SUPPORT_FAKE_S3_SERVER_H_
#include <memory>
#include <string>
#include "base/macros.h"
#include "base/process/process.h"
namespace chromeos {
namespace assistant {
class PortSelector;
enum class FakeS3Mode {
// In this mode all S3 requests are forwarded to the S3 server.
kProxy,
// In this mode all S3 requests are forwarded to the S3 server, and the
// responses are recorded.
kRecord,
// In this mode all S3 requests are handled by replaying the responses stored
// while running in |kRecord| mode.
kReplay,
};
// Class that starts/stops a fake S3 server.
// Note that this will also ensure the Assistant service knows to use the fake
// s3 server.
//
// A valid access token is required if mode is |kProxy| or |kReplay|. See
// |kGenerateTokenInstructions| for information on how to get one.
class FakeS3Server {
public:
// |data_file_version| is used to look for a particular set of test data
// files to use. This enables updating tests and checking in test data and
// test themselves separately. If the latest version of the test data file
// does not exist, it will automatically looker for an older version of the
// file.
explicit FakeS3Server(int data_file_version);
~FakeS3Server();
// Starts the fake S3 server, and tells the Assistant service to use its URI
// for all S3 requests.
void Setup(FakeS3Mode mode);
void Teardown();
// Returns the access token used by the S3 Server. This is only populated
// after |Setup| is called.
std::string GetAccessToken() const;
private:
void SetAccessTokenForMode(FakeS3Mode mode);
void SetFakeS3ServerURI();
void UnsetFakeS3ServerURI();
void StartS3ServerProcess(FakeS3Mode mode);
void StopS3ServerProcess();
std::string GetTestDataFileName();
int port() const;
std::string access_token_{"FAKE_ACCESS_TOKEN"};
std::string fake_s3_server_uri_;
int data_file_version_;
std::unique_ptr<PortSelector> port_selector_;
base::Process fake_s3_server_;
DISALLOW_COPY_AND_ASSIGN(FakeS3Server);
};
} // namespace assistant
} // namespace chromeos
#endif // CHROME_BROWSER_UI_ASH_ASSISTANT_TEST_SUPPORT_FAKE_S3_SERVER_H_