| /* Copyright 2019 The Chromium OS 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 HARDWARE_VERIFIER_CLI_H_ |
| #define HARDWARE_VERIFIER_CLI_H_ |
| |
| #include <memory> |
| #include <ostream> |
| #include <string> |
| |
| #include <base/macros.h> |
| |
| #include "hardware_verifier/hw_verification_spec_getter.h" |
| #include "hardware_verifier/probe_result_getter.h" |
| #include "hardware_verifier/verifier.h" |
| |
| namespace hardware_verifier { |
| |
| enum CLIVerificationResult { |
| kPass = 0, |
| |
| // The whole process works without errors, but the verification |
| // report shows the device is not compliant. |
| kFail, |
| |
| // Failed to load the probe result from the specific file. |
| kInvalidProbeResultFile, |
| |
| // Failed to load the verification payload from either the default one |
| // or the specific one. |
| kInvalidHwVerificationSpecFile, |
| |
| // The |runtime_probe| fails to return a valid probe result. |
| kProbeFail, |
| |
| // Content in the verification payload and the probe result are not matched |
| // to each other. |
| kProbeResultHwVerificationSpecMisalignment, |
| |
| kUnknownError |
| }; |
| |
| enum CLIOutputFormat { |
| kProtoBin, // Protobuf binary format. |
| kText // Human readable text format for debug purpose. |
| }; |
| |
| // A class that holds the core logic of the program if runs in CLI mode. |
| class CLI { |
| public: |
| // Constructor, it sets the dependent classes to the default implementation. |
| CLI(); |
| CLI(const CLI&) = delete; |
| CLI& operator=(const CLI&) = delete; |
| |
| // Verifies the probe result with the verification payload and then outputs |
| // the report. |
| // |
| // @param probe_result_file: Path to the file that contains the probe result. |
| // If the string is empty, it invokes |runtime_probe| to get the probe |
| // result. |
| // @param hw_verification_spec_file: Path to the file that contains the |
| // verification payload. If the string is empty, it reads the default |
| // verification payload file in the rootfs. |
| // @param output_format: The format of the output data. |
| // @param pii: Output result including PII data like UUID and generic device |
| // info. |
| // |
| // @return Execution result, can be either the verification result or the |
| // failure code. |
| CLIVerificationResult Run(const std::string& probe_result_file, |
| const std::string& hw_verification_spec_file, |
| const CLIOutputFormat output_format, |
| bool pii); |
| |
| private: |
| friend class CLITest; |
| |
| // Dependent classes. |
| std::unique_ptr<ProbeResultGetter> pr_getter_; |
| std::unique_ptr<HwVerificationSpecGetter> vp_getter_; |
| std::unique_ptr<Verifier> verifier_; |
| |
| // Instance to the output stream, default to |std::cout|. |
| std::ostream* output_stream_; |
| }; |
| |
| } // namespace hardware_verifier |
| |
| #endif // HARDWARE_VERIFIER_CLI_H_ |