fake_p2p_manager_configuration.h revision b339155941fe27d52c022d01ff5e3faefaa63fa2
127a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen// Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 227a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen// Use of this source code is governed by a BSD-style license that can be 327a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen// found in the LICENSE file. 427a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 5cf175a098081f3f0e9ca52d997a7ce1585c14c2dGilad Arnold#ifndef UPDATE_ENGINE_FAKE_P2P_MANAGER_CONFIGURATION_H_ 6cf175a098081f3f0e9ca52d997a7ce1585c14c2dGilad Arnold#define UPDATE_ENGINE_FAKE_P2P_MANAGER_CONFIGURATION_H_ 727a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 827a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen#include "update_engine/p2p_manager.h" 910875d90cf67f883ba7c9ed13bc8d706aa8c6fbcAlex Deymo#include "update_engine/test_utils.h" 1027a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen#include "update_engine/utils.h" 1127a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 12d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko#include <string> 13d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko#include <vector> 14d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko 1527a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen#include <base/logging.h> 168ad6da98cdf5670ac999482d6579fbd49997809aAlex Deymo#include <base/strings/string_util.h> 17b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo#include <base/strings/string_number_conversions.h> 1827a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 1927a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthennamespace chromeos_update_engine { 2027a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 2127a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen// Configuration for P2PManager for use in unit tests. Instead of 2227a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen// /var/cache/p2p, a temporary directory is used. 2327a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthenclass FakeP2PManagerConfiguration : public P2PManager::Configuration { 24d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko public: 25b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo FakeP2PManagerConfiguration() { 2627a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen EXPECT_TRUE(utils::MakeTempDirectory("/tmp/p2p-tc.XXXXXX", &p2p_dir_)); 2727a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen } 2827a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 2927a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen ~FakeP2PManagerConfiguration() { 3010875d90cf67f883ba7c9ed13bc8d706aa8c6fbcAlex Deymo if (p2p_dir_.size() > 0 && !test_utils::RecursiveUnlinkDir(p2p_dir_)) { 3127a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen PLOG(ERROR) << "Unable to unlink files and directory in " << p2p_dir_; 3227a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen } 3327a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen } 3427a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 3527a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen // P2PManager::Configuration override 36610277efc6f7e5239158dfa4bb3b1021804326e0Alex Deymo base::FilePath GetP2PDir() override { 3775039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko return base::FilePath(p2p_dir_); 38d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko } 3927a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 4027a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen // P2PManager::Configuration override 41610277efc6f7e5239158dfa4bb3b1021804326e0Alex Deymo std::vector<std::string> GetInitctlArgs(bool is_start) override { 4227a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen return is_start ? initctl_start_args_ : initctl_stop_args_; 4327a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen } 4427a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 4527a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen // P2PManager::Configuration override 46610277efc6f7e5239158dfa4bb3b1021804326e0Alex Deymo std::vector<std::string> GetP2PClientArgs(const std::string &file_id, 47610277efc6f7e5239158dfa4bb3b1021804326e0Alex Deymo size_t minimum_size) override { 48b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo std::vector<std::string> formatted_command = p2p_client_cmd_format_; 498ad6da98cdf5670ac999482d6579fbd49997809aAlex Deymo // Replace {variable} on the passed string. 50b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo std::string str_minimum_size = base::SizeTToString(minimum_size); 51b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo for (std::string& arg : formatted_command) { 52b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo ReplaceSubstringsAfterOffset(&arg, 0, "{file_id}", file_id); 53b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo ReplaceSubstringsAfterOffset(&arg, 0, "{minsize}", str_minimum_size); 54b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo } 55b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo return formatted_command; 5627a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen } 5727a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 5827a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen // Use |command_line| instead of "initctl start p2p" when attempting 5927a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen // to start the p2p service. 60b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo void SetInitctlStartCommand(const std::vector<std::string>& command) { 61b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo initctl_start_args_ = command; 6227a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen } 6327a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 6427a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen // Use |command_line| instead of "initctl stop p2p" when attempting 6527a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen // to stop the p2p service. 66b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo void SetInitctlStopCommand(const std::vector<std::string>& command) { 67b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo initctl_stop_args_ = command; 6827a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen } 6927a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 70b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo // Use |command_format| instead of "p2p-client --get-url={file_id} 718ad6da98cdf5670ac999482d6579fbd49997809aAlex Deymo // --minimum-size={minsize}" when attempting to look up a file using 7227a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen // p2p-client(1). 7327a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen // 74b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo // The passed |command_format| argument can have "{file_id}" and "{minsize}" 75b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo // as substrings of any of its elements, that will be replaced by the 76b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo // corresponding values passed to GetP2PClientArgs(). 77b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo void SetP2PClientCommand(const std::vector<std::string>& command_format) { 78b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo p2p_client_cmd_format_ = command_format; 7927a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen } 8027a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 81d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko private: 8227a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen // The temporary directory used for p2p. 8327a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen std::string p2p_dir_; 8427a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 8527a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen // Argument vector for starting p2p. 86b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo std::vector<std::string> initctl_start_args_{"initctl", "start", "p2p"}; 8727a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 8827a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen // Argument vector for stopping p2p. 89b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo std::vector<std::string> initctl_stop_args_{"initctl", "stop", "p2p"}; 9027a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 918ad6da98cdf5670ac999482d6579fbd49997809aAlex Deymo // A string for generating the p2p-client command. See the 928ad6da98cdf5670ac999482d6579fbd49997809aAlex Deymo // SetP2PClientCommandLine() for details. 93b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo std::vector<std::string> p2p_client_cmd_format_{ 94b339155941fe27d52c022d01ff5e3faefaa63fa2Alex Deymo "p2p-client", "--get-url={file_id}", "--minimum-size={minsize}"}; 9527a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 9627a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen DISALLOW_COPY_AND_ASSIGN(FakeP2PManagerConfiguration); 9727a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen}; 9827a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 9927a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen} // namespace chromeos_update_engine 10027a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthen 101cf175a098081f3f0e9ca52d997a7ce1585c14c2dGilad Arnold#endif // UPDATE_ENGINE_FAKE_P2P_MANAGER_CONFIGURATION_H_ 102