blob: 5023bf83b1d13b836040738478106b872e493eae [file] [log] [blame]
Patrick Venture3ecb3502019-05-17 11:03:51 -07001/*
2 * Copyright 2019 Google Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include "verify.hpp"
18
19#include "status.hpp"
20
21#include <fstream>
22#include <memory>
23#include <sdbusplus/bus.hpp>
24#include <string>
25#include <vector>
26
27namespace blobs
28{
29
30std::unique_ptr<VerificationInterface>
31 Verification::CreateDefaultVerification(sdbusplus::bus::bus&& bus,
32 const std::string& path,
33 const std::string& service)
34{
35 return std::make_unique<Verification>(std::move(bus), path, service);
36}
37
38bool Verification::triggerVerification()
39{
40 static constexpr auto systemdService = "org.freedesktop.systemd1";
41 static constexpr auto systemdRoot = "/org/freedesktop/systemd1";
42 static constexpr auto systemdInterface = "org.freedesktop.systemd1.Manager";
43
44 auto method = bus.new_method_call(systemdService, systemdRoot,
45 systemdInterface, "StartUnit");
46 method.append(triggerService);
47 method.append("replace");
48
49 try
50 {
51 bus.call_noreply(method);
52 }
53 catch (const sdbusplus::exception::SdBusError& ex)
54 {
55 /* TODO: Once logging supports unit-tests, add a log message to test
56 * this failure.
57 */
58 return false;
59 }
60
61 return true;
62}
63
64void Verification::abortVerification()
65{
66 /* TODO: Implement this. */
67}
68
69VerifyCheckResponses Verification::checkVerificationState()
70{
71 VerifyCheckResponses result = VerifyCheckResponses::other;
72
73 std::ifstream ifs;
74 ifs.open(checkPath);
75 if (ifs.good())
76 {
77 /*
78 * Check for the contents of the file, accepting:
79 * running, success, or failed.
80 */
81 std::string status;
82 ifs >> status;
83 if (status == "running")
84 {
85 result = VerifyCheckResponses::running;
86 }
87 else if (status == "success")
88 {
89 result = VerifyCheckResponses::success;
90 }
91 else if (status == "failed")
92 {
93 result = VerifyCheckResponses::failed;
94 }
95 }
96
97 return result;
98}
99
100} // namespace blobs