blob: 0d3c2c96edce13d79e2811d686dfefbaa76f1a99 [file] [log] [blame]
Matt Spinler597e05c2017-02-28 09:59:53 -06001/**
2 * Copyright © 2017 IBM Corporation
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#include <gtest/gtest.h>
17#include <experimental/filesystem>
18#include <fstream>
19#include <stdlib.h>
Matt Spinlerd9bdcf72017-03-09 15:06:23 -060020#include "registration.hpp"
Matt Spinler597e05c2017-02-28 09:59:53 -060021#include "targeting.hpp"
22
Matt Spinlerd9bdcf72017-03-09 15:06:23 -060023using namespace openpower::util;
Matt Spinler597e05c2017-02-28 09:59:53 -060024using namespace openpower::targeting;
25namespace fs = std::experimental::filesystem;
26
27constexpr auto masterDir = "/tmp";
28
29class TargetingTest : public ::testing::Test
30{
31 protected:
32
33 virtual void SetUp()
34 {
35 char dir[50];
36 strcpy(dir, masterDir);
37 strcat(dir, "/targetingXXXXXX");
38
39 auto path = mkdtemp(dir);
40 assert(path != nullptr);
41
42 _directory = path;
43 }
44
45 virtual void TearDown()
46 {
47 fs::remove_all(_directory);
48 }
49
50 std::string _directory;
51};
52
53
54TEST_F(TargetingTest, CreateTargets)
55{
56
57 //Test that we always create the first Target
58 {
59 Targeting targets{masterDir, _directory};
60 ASSERT_EQ(targets.size(), 1);
61
62 auto t = targets.begin();
63 ASSERT_EQ((*t)->getPos(), 0);
64
65 ASSERT_EQ((*t)->getPath(), masterDir);
66 }
67
68
69 //Test that we can create multiple Targets
70 {
71 //make some fake slave entries
72 std::ofstream(_directory + "/slave@01:00");
73 std::ofstream(_directory + "/slave@02:00");
74 std::ofstream(_directory + "/slave@03:00");
75 std::ofstream(_directory + "/slave@04:00");
76
77 Targeting targets{masterDir, _directory};
78
79 ASSERT_EQ(targets.size(), 5);
80
81 int i = 0;
82
83 for (const auto& t : targets)
84 {
85 std::ostringstream path;
86
87 ASSERT_EQ(t->getPos(), i);
88
89 if (0 == i)
90 {
91 path << masterDir;
92 }
93 else
94 {
95 path << _directory << "/slave@0" << i << ":00/raw";
96 }
97
98 ASSERT_EQ(t->getPath(), path.str());
99 i++;
100 }
101 }
102}
Matt Spinlerd9bdcf72017-03-09 15:06:23 -0600103
104
105void func1()
106{
107 std::cout << "Hello\n";
108}
109
110void func2()
111{
112 std::cout << "World\n";
113}
114
115REGISTER_PROCEDURE("hello", func1);
116REGISTER_PROCEDURE("world", func2);
117
118
119TEST(RegistrationTest, TestReg)
120{
121 int count = 0;
122 for (const auto& p : Registration::getProcedures())
123 {
124 std::cout << p.first << std::endl;
125 p.second();
126 count++;
127 }
128
129 ASSERT_EQ(count, 2);
130}