Create regulators StubAction class
Created the StubAction class to aid in unit testing the
phosphor-regulators application. This simple 'stub' will either return
a predefined return value or throw a predefined exception.
Updated the meson.build file to search for includes in the test
tree. This is where stub classes will be located.
Signed-off-by: Shawn McCarney <shawnmm@us.ibm.com>
Change-Id: I78030d29f3bc6a94db998c5a1712a3b4a03c3e90
diff --git a/phosphor-regulators/meson.build b/phosphor-regulators/meson.build
index 6d04d87..774868c 100644
--- a/phosphor-regulators/meson.build
+++ b/phosphor-regulators/meson.build
@@ -1,4 +1,2 @@
-phosphor_regulators_includes = include_directories('src', 'src/actions')
-
subdir('src')
subdir('test')
diff --git a/phosphor-regulators/src/meson.build b/phosphor-regulators/src/meson.build
index 19f1bb5..23266b0 100644
--- a/phosphor-regulators/src/meson.build
+++ b/phosphor-regulators/src/meson.build
@@ -1 +1,4 @@
-# subdir('actions')
+phosphor_regulators_include_directories = include_directories(
+ '.',
+ 'actions'
+)
diff --git a/phosphor-regulators/test/actions/meson.build b/phosphor-regulators/test/actions/meson.build
index d6821de..8809eb4 100644
--- a/phosphor-regulators/test/actions/meson.build
+++ b/phosphor-regulators/test/actions/meson.build
@@ -7,6 +7,9 @@
gtest,
],
implicit_include_directories: false,
- include_directories: phosphor_regulators_includes,
+ include_directories: [
+ phosphor_regulators_include_directories,
+ phosphor_regulators_tests_include_directories
+ ]
)
)
diff --git a/phosphor-regulators/test/actions/stub_action.hpp b/phosphor-regulators/test/actions/stub_action.hpp
new file mode 100644
index 0000000..ea346ba
--- /dev/null
+++ b/phosphor-regulators/test/actions/stub_action.hpp
@@ -0,0 +1,153 @@
+/**
+ * Copyright © 2019 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma once
+
+#include "action.hpp"
+#include "action_environment.hpp"
+
+#include <cstddef> // for size_t
+#include <exception>
+#include <memory>
+#include <utility>
+
+namespace phosphor
+{
+namespace power
+{
+namespace regulators
+{
+
+/**
+ * @class StubAction
+ *
+ * Stub action used for unit tests.
+ *
+ * The action allows you to do one of the following when execute() is called:
+ * - return a predefined return value
+ * - throw an exception
+ *
+ * The action also tracks the following:
+ * - number of times action has been executed
+ * - number of exceptions thrown
+ */
+class StubAction : public Action
+{
+ public:
+ // Specify which compiler-generated methods we want
+ StubAction() = delete;
+ StubAction(const StubAction&) = delete;
+ StubAction(StubAction&&) = delete;
+ StubAction& operator=(const StubAction&) = delete;
+ StubAction& operator=(StubAction&&) = delete;
+ virtual ~StubAction() = default;
+
+ /**
+ * Constructor.
+ *
+ * @param returnValue value to return when execute() is called
+ */
+ explicit StubAction(bool returnValue) : returnValue{returnValue}
+ {
+ }
+
+ /**
+ * Executes this action.
+ *
+ * Throws an exception if setException() was called. Otherwise returns the
+ * return value specified in the constructor or with setReturnValue().
+ *
+ * @param environment action execution environment
+ * @return value of returnValue data member
+ */
+ virtual bool execute(ActionEnvironment& environment) override
+ {
+ ++executeCount;
+
+ if (except)
+ {
+ ++exceptionCount;
+ throw *except;
+ }
+
+ return returnValue;
+ }
+
+ /**
+ * Returns the number of exceptions that have been thrown when execute() was
+ * called.
+ *
+ * @return number of exceptions thrown
+ */
+ size_t getExceptionCount() const
+ {
+ return exceptionCount;
+ }
+
+ /**
+ * Returns the number of times execute() has been called.
+ *
+ * @return number of times execute() called
+ */
+ size_t getExecuteCount() const
+ {
+ return executeCount;
+ }
+
+ /**
+ * Sets the value that will be returned when execute() is called.
+ *
+ * @param returnValue value to return from execute()
+ */
+ void setReturnValue(bool returnValue)
+ {
+ this->returnValue = returnValue;
+ }
+
+ /**
+ * Sets the exception that will be thrown when execute() is called.
+ *
+ * @param except exception to throw, or nullptr to throw no exception
+ */
+ void setException(std::unique_ptr<std::exception> except)
+ {
+ this->except = std::move(except);
+ }
+
+ private:
+ /**
+ * Value that will be returned when execute() is called.
+ */
+ bool returnValue{true};
+
+ /**
+ * Exception to throw (if any) when execute() is called.
+ */
+ std::unique_ptr<std::exception> except{nullptr};
+
+ /**
+ * Number of times execute() has been called on this action.
+ */
+ size_t executeCount{0};
+
+ /**
+ * Number of times an exception was thrown when execute() was called.
+ */
+ size_t exceptionCount{0};
+};
+
+} // namespace regulators
+} // namespace power
+} // namespace phosphor
diff --git a/phosphor-regulators/test/meson.build b/phosphor-regulators/test/meson.build
index fdf8c00..ee880f0 100644
--- a/phosphor-regulators/test/meson.build
+++ b/phosphor-regulators/test/meson.build
@@ -1,3 +1,8 @@
+phosphor_regulators_tests_include_directories = include_directories(
+ '.',
+ 'actions'
+)
+
test('phosphor-regulators-tests',
executable('phosphor-regulators-tests',
'device_tests.cpp',
@@ -9,7 +14,10 @@
gtest,
],
implicit_include_directories: false,
- include_directories: phosphor_regulators_includes,
+ include_directories: [
+ phosphor_regulators_include_directories,
+ phosphor_regulators_tests_include_directories
+ ]
)
)