OpenSDN source code
policy_test.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #include <boost/asio.hpp>
6 #include <boost/bind/bind.hpp>
7 
8 #include <db/db_entry.h>
9 #include <db/db_table.h>
10 #include <db/db_table_partition.h>
11 
12 #include "base/logging.h"
13 #include "testing/gunit.h"
14 
17 
18 using namespace boost::placeholders;
19 
20 class MyTest {
21  public:
23  return;
24  }
25 };
26 
27 namespace {
28 class PolicyTest : public ::testing::Test {
29 protected:
30 };
31 
32 
33 // Create and delete Policy
34 TEST_F(PolicyTest, Basic) {
35  PolicyConfigSpec policy_c_s1;
36 
37  uuid vpc_id1 = StringToUuid("00000000-0000-0000-0000-000000000001");
38  uuid policy_id1 = StringToUuid("00000000-0000-0000-0000-000000000001");
39  policy_c_s1.vpc_id = vpc_id1;
40  policy_c_s1.policy_id = policy_id1;
41  policy_c_s1.name.clear();
42  policy_c_s1.name.append("Contrail Employee SG");
43  policy_c_s1.inbound = true;
44  policy_c_s1.acl_id = StringToUuid("00000000-0000-0000-0000-000000000001");
45 
46  DB db;
48  DBTableBase *table = db.CreateTable("db.policy.0");
49  assert(table);
50 
51  PolicyTable *ptable = static_cast<PolicyTable *>(db.FindTable("db.policy.0"));
52  assert(ptable);
53 
54  DBRequest req;
55  req.key.reset(new PolicyKey(policy_id1));
56 
57  PolicyData *pd;
58  pd = new PolicyData();
59  pd->Init(policy_c_s1);
60  req.data.reset(pd);
62  table->Enqueue(&req);
63  sleep(1);
64  EXPECT_TRUE(NULL != ptable->FindActiveEntry(new PolicyKey(policy_id1)));
65 }
66 
67 
68 // Modify policy and delete
69 TEST_F(PolicyTest, ChangeAnEntry) {
70  PolicyConfigSpec policy_c_s1;
71 
72  uuid vpc_id1 = StringToUuid("00000000-0000-0000-0000-000000000001");
73  uuid policy_id1 = StringToUuid("00000000-0000-0000-0000-000000000001");
74  policy_c_s1.vpc_id = vpc_id1;
75  policy_c_s1.policy_id = policy_id1;
76  policy_c_s1.name.clear();
77  policy_c_s1.name.append("Contrail Employee SG");
78  policy_c_s1.inbound = true;
79  policy_c_s1.acl_id = StringToUuid("00000000-0000-0000-0000-000000000001");
80 
81  DB db;
83  DBTableBase *table = db.CreateTable("db.policy.0");
84  assert(table);
85 
86  PolicyTable *ptable = static_cast<PolicyTable *>(db.FindTable("db.policy.0"));
87  assert(ptable);
88 
89  DBRequest req;
90  req.key.reset(new PolicyKey(policy_id1));
91 
92  PolicyData *pd;
93  pd = new PolicyData();
94  pd->Init(policy_c_s1);
95  req.data.reset(pd);
97  table->Enqueue(&req);
98 
99  sleep(1);
100  EXPECT_TRUE(NULL != ptable->FindActiveEntry(new PolicyKey(policy_id1)));
101 
102  // Modifing a existing policy
103  policy_c_s1.inbound = true;
104  policy_c_s1.acl_id = StringToUuid("00000000-0000-0000-0000-000000000002");
105 
106  Policy *pe = static_cast<Policy *>
107  (ptable->FindActiveEntry(new PolicyKey(policy_id1)));
108  EXPECT_TRUE(NULL != pe);
109 
110  DBRequest req1;
111  req1.key.reset(new PolicyKey(policy_id1));
112  PolicyData *pd1;
113  pd1 = new PolicyData();
114  pd1->Init(policy_c_s1);
115  req1.data.reset(pd1);
117  ptable->Enqueue(&req1);
118  sleep(1);
119  AclPtr ap = pe->FindAcl(true,
120  StringToUuid("00000000-0000-0000-0000-000000000002"));
121  EXPECT_TRUE(NULL != ap);
122  sleep(1);
123 
124  DBRequest req2;
125  req2.key.reset(new PolicyKey(policy_id1));
127  ptable->Enqueue(&req2);
128  sleep(1);
129 }
130 
131 
132 } //namespace
133 
134 int main (int argc, char **argv) {
135  LoggingInit();
136  ::testing::InitGoogleTest(&argc, argv);
137  return RUN_ALL_TESTS();
138 }
bool Enqueue(DBRequest *req)
Definition: db_table.cc:220
Definition: db.h:24
DBTableBase * FindTable(const std::string &name)
Definition: db.cc:68
DBTableBase * CreateTable(const std::string &name)
Definition: db.cc:99
void TableListener(DBTablePartBase *root, DBEntryBase *entry)
Definition: policy_test.cc:22
static void Register()
Definition: policy.cc:194
AclPtr FindAcl(const bool inbound, const uuid acl_id)
Definition: policy.cc:59
void LoggingInit()
Definition: logging.cc:82
static boost::uuids::uuid StringToUuid(const std::string &str)
Definition: string_util.h:145
DBOperation oper
Definition: db_table.h:42
@ DB_ENTRY_DELETE
Definition: db_table.h:39
@ DB_ENTRY_ADD_CHANGE
Definition: db_table.h:38
std::unique_ptr< DBRequestKey > key
Definition: db_table.h:48
std::unique_ptr< DBRequestData > data
Definition: db_table.h:49
void Init(const PolicyConfigSpec &policy_cfg)
Definition: policy.cc:11
TEST_F(TestDummy, test_1)
boost::uuids::uuid uuid