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