File: ut_PushData.cpp

package info (click to toggle)
vzlogger 0.8.9-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,140 kB
  • sloc: cpp: 12,020; sh: 331; ansic: 157; makefile: 25
file content (111 lines) | stat: -rw-r--r-- 2,991 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include "PushData.hpp"
#include "gtest/gtest.h"

// dirty hack until we find a better solution:
#include "../src/PushData.cpp"

TEST(PushData, PDL_basic_constructor) {
	ASSERT_EQ(0, pushDataList);
	PushDataList pdl;
	ASSERT_EQ(0, pushDataList);
}

TEST(PushData, PDL_basic_add) {
	PushDataList pdl;
	pdl.add("0", 1, 1.0);
	// let pdl destroy it
}

TEST(PushData, PDL_basic_waitForData) {
	PushDataList pdl;
	pdl.add("0", 1, 1.0);
	PushDataList::DataMap *dm = pdl.waitForData();
	ASSERT_TRUE(0 != dm);
	ASSERT_EQ(1ul, dm->size());
	delete dm;
}

TEST(PushData, PDL_basic_waitForData2) {
	PushDataList pdl;
	pdl.add("0", 1, 1.0);
	pdl.add("0", 2, 2.0);
	PushDataList::DataMap *dm = pdl.waitForData();
	ASSERT_TRUE(0 != dm);
	ASSERT_EQ(1ul, dm->size()); // still one uuid
	ASSERT_EQ(2ul, dm->operator[]("0").size());
	delete dm;
}

TEST(PushData, PDL_basic_waitForData3) {
	PushDataList pdl;
	pdl.add("0", 1, 1.0);
	pdl.add("0", 2, 2.0);
	pdl.add("1", 3, 3.0);
	PushDataList::DataMap *dm = pdl.waitForData();
	ASSERT_TRUE(0 != dm);
	ASSERT_EQ(2ul, dm->size()); // now two uuids
	ASSERT_EQ(2ul, dm->operator[]("0").size());
	ASSERT_EQ(1ul, dm->operator[]("1").size());
	delete dm;
}

TEST(PushData, PDL_basic_waitForData4) {
	PushDataList pdl;
	pdl.add("0", 1, 1.0);
	PushDataList::DataMap *dm = pdl.waitForData();
	ASSERT_TRUE(0 != dm);
	ASSERT_EQ(1ul, dm->size());
	delete dm;
	pdl.add("1", 4, 4.4);
	dm = pdl.waitForData();
	ASSERT_TRUE(0 != dm);
	ASSERT_EQ(1ul, dm->size());
	ASSERT_EQ(4.4, dm->operator[]("1").back().second);
	delete dm;
}

// todo if we'd provide a timeout to waitForData we could test here the case with empty data

class PushDataServerTest {
  public:
	PushDataServerTest(PushDataServer &pds) : _pds(pds){};
	std::string generateJson(PushDataList::DataMap &dataMap) { return _pds.generateJson(dataMap); }
	size_t size() { return _pds._middlewareList.size(); };
	PushDataServer &_pds;
};

TEST(PushData, PDS_only_constructor) { PushDataServer pds(0); }

TEST(PushData, PDS_constructor) {
	PushDataServer pds(0);
	PushDataServerTest pt(pds);

	PushDataList pdl;
	pdl.add("0", 1, 1.1);
	PushDataList::DataMap *dm = pdl.waitForData();
	ASSERT_TRUE(0 != dm);
	std::string str = pt.generateJson(*dm);
	// todo fix the comparision! 1.10000 vs. 1.10000001, ... ASSERT_EQ("{ \"data\": [ { \"uuid\":
	// \"0\", \"tuples\": [ [ 1, 1.100000 ] ] } ] }", str);
}

TEST(PushData, PDS_fail_middleware) {
	ASSERT_EQ(0, curlSessionProvider);
	curlSessionProvider = new CurlSessionProvider();

	struct json_object *jso =
		json_tokener_parse("[{\"url\": \"http://127.0.0.1:45431/unit_test/push.json\"}]");
	PushDataServer pds(jso);
	json_object_put(jso);
	PushDataServerTest pt(pds);
	ASSERT_EQ(1ul, pt.size());
	PushDataList pdl;
	pdl.add("0", 1, 1.1);
	pushDataList = &pdl;
	ASSERT_FALSE(pds.waitAndSendOnceToAll()); // we assume that localhost:45431/unit_test/push.json
											  // can't be connected to
	pushDataList = 0;

	delete curlSessionProvider;
	curlSessionProvider = 0;
}