Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ad54d094 authored by Tom Cherry's avatar Tom Cherry
Browse files

init: create init_tests.cpp

Start a init_tests.cpp file for end-to-end tests that parse small init script
segments and verify that they act as expected.

The first tests ensure that the execution order of event triggers
happens appropriately.

Test: Boot bullhead, run unit tests

Change-Id: Ic446c02605ab796fd41e0596ce1fd381aee80ce0
parent 30a6f276
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -143,6 +143,7 @@ LOCAL_MODULE := init_tests
LOCAL_SRC_FILES := \
LOCAL_SRC_FILES := \
    devices_test.cpp \
    devices_test.cpp \
    init_parser_test.cpp \
    init_parser_test.cpp \
    init_test.cpp \
    property_service_test.cpp \
    property_service_test.cpp \
    util_test.cpp \
    util_test.cpp \


@@ -154,7 +155,7 @@ LOCAL_SHARED_LIBRARIES += \
LOCAL_STATIC_LIBRARIES := libinit
LOCAL_STATIC_LIBRARIES := libinit
LOCAL_SANITIZE := integer
LOCAL_SANITIZE := integer
LOCAL_CLANG := true
LOCAL_CLANG := true
LOCAL_CPPFLAGS := -Wall -Wextra -Werror
LOCAL_CPPFLAGS := -Wall -Wextra -Werror -std=gnu++1z
include $(BUILD_NATIVE_TEST)
include $(BUILD_NATIVE_TEST)




+5 −4
Original line number Original line Diff line number Diff line
@@ -91,6 +91,9 @@ class ActionManager {
  public:
  public:
    static ActionManager& GetInstance();
    static ActionManager& GetInstance();


    // Exposed for testing
    ActionManager();

    void AddAction(std::unique_ptr<Action> action);
    void AddAction(std::unique_ptr<Action> action);
    void QueueEventTrigger(const std::string& trigger);
    void QueueEventTrigger(const std::string& trigger);
    void QueuePropertyTrigger(const std::string& name, const std::string& value);
    void QueuePropertyTrigger(const std::string& name, const std::string& value);
@@ -101,8 +104,6 @@ public:
    void DumpState() const;
    void DumpState() const;


  private:
  private:
    ActionManager();

    ActionManager(ActionManager const&) = delete;
    ActionManager(ActionManager const&) = delete;
    void operator=(ActionManager const&) = delete;
    void operator=(ActionManager const&) = delete;


+1 −1
Original line number Original line Diff line number Diff line
@@ -838,7 +838,7 @@ static int do_init_user0(const std::vector<std::string>& args) {
    return e4crypt_do_init_user0();
    return e4crypt_do_init_user0();
}
}


BuiltinFunctionMap::Map& BuiltinFunctionMap::map() const {
const BuiltinFunctionMap::Map& BuiltinFunctionMap::map() const {
    constexpr std::size_t kMax = std::numeric_limits<std::size_t>::max();
    constexpr std::size_t kMax = std::numeric_limits<std::size_t>::max();
    // clang-format off
    // clang-format off
    static const Map builtin_functions = {
    static const Map builtin_functions = {
+7 −6
Original line number Original line Diff line number Diff line
@@ -17,19 +17,20 @@
#ifndef _INIT_BUILTINS_H
#ifndef _INIT_BUILTINS_H
#define _INIT_BUILTINS_H
#define _INIT_BUILTINS_H


#include <functional>
#include <map>
#include <map>
#include <string>
#include <string>
#include <vector>
#include <vector>


#include "keyword_map.h"
#include "keyword_map.h"


using BuiltinFunction = int (*) (const std::vector<std::string>& args);
using BuiltinFunction = std::function<int(const std::vector<std::string>&)>;
class BuiltinFunctionMap : public KeywordMap<BuiltinFunction> {
class BuiltinFunctionMap : public KeywordMap<BuiltinFunction> {
  public:
  public:
    BuiltinFunctionMap() {
    BuiltinFunctionMap() {}
    }

  private:
  private:
    Map& map() const override;
    const Map& map() const override;
};
};


#endif
#endif
+7 −4
Original line number Original line Diff line number Diff line
@@ -58,9 +58,14 @@ class SectionParser {
class Parser {
class Parser {
  public:
  public:
    static Parser& GetInstance();
    static Parser& GetInstance();

    // Exposed for testing
    Parser();

    bool ParseConfig(const std::string& path);
    bool ParseConfig(const std::string& path);
    void AddSectionParser(const std::string& name,
    void AddSectionParser(const std::string& name,
                          std::unique_ptr<SectionParser> parser);
                          std::unique_ptr<SectionParser> parser);

    void set_is_system_etc_init_loaded(bool loaded) {
    void set_is_system_etc_init_loaded(bool loaded) {
        is_system_etc_init_loaded_ = loaded;
        is_system_etc_init_loaded_ = loaded;
    }
    }
@@ -75,8 +80,6 @@ public:
    bool is_odm_etc_init_loaded() { return is_odm_etc_init_loaded_; }
    bool is_odm_etc_init_loaded() { return is_odm_etc_init_loaded_; }


  private:
  private:
    Parser();

    void ParseData(const std::string& filename, const std::string& data);
    void ParseData(const std::string& filename, const std::string& data);
    bool ParseConfigFile(const std::string& path);
    bool ParseConfigFile(const std::string& path);
    bool ParseConfigDir(const std::string& path);
    bool ParseConfigDir(const std::string& path);
Loading