source: libcf++/trunk/test/test.cpp@ 4

Last change on this file since 4 was 4, checked in by cheese, 9 years ago

#1 commit prototype

File size: 5.0 KB
Line 
1#include "cf/test.hpp"
2#include "cf/bin.h"
3#include "cf/codec.h"
4#include "cf/file.h"
5#include "cf/logger.h"
6#include "cf/task.h"
7#include "cf/util.h"
8#include "cf/network.h"
9
10#include <string>
11
12/*--------------------------------------------------------------*/
13
14// test string
15#define STRING "test string"
16#define LOGFILE "lol"
17// for networking
18#define HOST "localhost"
19#define PORT 1234
20#define TIMEOUT 3
21
22/*--------------------------------------------------------------*/
23
24static void throwEx2() throw (cf::exception);
25static void throwEx1() throw (cf::exception);
26static int serverWorker(void * arg);
27static int clientWorker(void * arg);
28
29/*--------------------------------------------------------------*/
30
31cf::task::mutex gMutex;
32cf::task::thread gServerWorker(serverWorker);
33
34/*--------------------------------------------------------------*/
35
36TEST(Exception, main)
37{
38 try
39 {
40 throwEx1();
41 }
42 catch (cf::exception & e)
43 {
44 std::cerr << e.stackTrace();
45 }
46}
47
48TEST(Bin, main)
49{
50 cf::bin a, b(STRING);
51
52 a = b;
53
54 cf::bin c = b;
55
56 b.print("bin-value");
57}
58
59TEST(Codec, main)
60{
61 std::string e;
62 cf::bin d;
63 cf::codec::ICodec * codec = NULL;
64
65 codec = cf::codec::base64::getInstance();;
66 e = codec->encode(STRING);
67 d = codec->decode(e);
68 std::cout << "input : " << STRING << "\n"
69 << "encoded : " << e << "\n";
70 d.print("decoded");
71
72 codec = cf::codec::hex::getInstance();;
73 e = codec->encode(STRING);
74 d = codec->decode(e);
75 std::cout << "input : " << STRING << "\n"
76 << "encoded : " << e << "\n";
77 d.print("decoded");
78}
79
80TEST(File, main)
81{
82 cf::file f(STRING);
83
84 f.open(cf::file::CREATE | cf::file::RW | cf::file::LOCK);
85 f.write(cf::bin(STRING));
86 f.close();
87 f.remove();
88}
89
90TEST(Logger, main)
91{
92 enum LOG_LEVEL
93 {
94 ERR = 1,
95 WARN,
96 INFO,
97 DEBUG
98 };
99 cf::logger * log = cf::logger::getInstance();
100
101 log->init(".");
102 log->setLevel(10);
103
104 log->add(LOGFILE, ERR , "ERROR" , cf::logger::DAILY);
105 log->add(LOGFILE, WARN , "WARNNING", cf::logger::DAILY);
106 log->add(LOGFILE, INFO , "INFO" , cf::logger::DAILY);
107 log->add(LOGFILE, DEBUG, "DEBUG" , cf::logger::DAILY);
108
109 log->write(ERR, "this is log message");
110}
111
112TEST(Util, main)
113{
114 cf::util::datetime dt = cf::util::getInstance()->getDateTime();
115
116 std::cout << "date : "
117 << dt.mYear << ":" << dt.mMonth << ":" << dt.mDay
118 << "(" << dt.mWeek << ":" << dt.mWeekName << ")"
119 << std::endl;
120 std::cout << "time : "
121 << dt.mHour << ":" << dt.mMin << ":" << dt.mSec << "." << dt.mUsec
122 << std::endl;
123}
124
125TEST(ThreadNetworking, Server)
126{
127 std::cout << "opening " << PORT << " ..." << std::endl;
128
129 gServerWorker.start(NULL);
130
131 // wait for server-binding
132 cf::task::thread::sleep(10);
133
134 std::cout << "server worker was started" << std::endl;
135}
136
137TEST(ThreadNetworking, Client)
138{
139 const int max = 5;
140 int i = 0;
141
142 cf::task::thread worker[max] = {
143 cf::task::thread(clientWorker),
144 cf::task::thread(clientWorker),
145 cf::task::thread(clientWorker),
146 cf::task::thread(clientWorker),
147 cf::task::thread(clientWorker),
148 };
149
150 for (i = 0 ; i < max ; i++)
151 worker[i].start(NULL);
152
153 for (i = 0 ; i < max ; i++)
154 worker[i].join();
155}
156
157TEST(Networking, NIC)
158{
159 std::cout << "H/W Address : "
160 << cf::network::nic::getMACAddress()
161 << std::endl;
162}
163
164int main(int argc, char ** argv)
165{
166 TEST_INIT(argc, argv);
167
168 TEST_RUN(Exception , main);
169 TEST_RUN(Bin , main);
170 TEST_RUN(Codec , main);
171 TEST_RUN(File , main);
172 TEST_RUN(Logger , main);
173 TEST_RUN(Util , main);
174 TEST_RUN(ThreadNetworking, Server);
175 TEST_RUN(ThreadNetworking, Client);
176 TEST_RUN(Networking , NIC);
177
178 TEST_RESULT();
179
180 return 0;
181}
182
183/*--------------------------------------------------------------*/
184
185void throwEx2() throw (cf::exception)
186{
187 THROW_EXCEPTION("exception test");
188}
189
190void throwEx1() throw (cf::exception)
191{
192 try
193 {
194 throwEx2();
195 }
196 catch (cf::exception & e)
197 {
198 FORWARD_EXCEPTION(e);
199 }
200}
201
202int serverWorker(void * arg)
203{
204 try
205 {
206 cf::network::tcp server;
207 cf::network::tcp client;
208 cf::bin msg;
209
210 server.listen(PORT);
211
212 while (true)
213 {
214 client.attach(server.accept().detach());
215 msg = client.receive();
216 client.send(msg);
217 client.close();
218 }
219
220 server.close();
221 }
222 catch (cf::exception & e)
223 {
224 std::cerr << e.stackTrace();
225 }
226
227 return 0;
228}
229
230int clientWorker(void * arg)
231{
232 std::cout << "connecting to "
233 << HOST << ":" << PORT << " ..."
234 << std::endl;
235
236 try
237 {
238 cf::network::tcp client;
239 cf::ulong_t tid = cf::task::thread::id();
240 cf::bin msg(STR(STRING << " " << tid).c_str());
241 cf::bin response;
242
243 client.connect(HOST, PORT, TIMEOUT);
244 client.send(msg);
245 response = client.receive();
246 client.close();
247
248 SYNCHRONIZED(gMutex)
249 {
250 response.print("print response in synchronized-scope : ");
251 }
252 }
253 catch (cf::exception & e)
254 {
255 SYNCHRONIZED(gMutex)
256 {
257 std::cerr << e.stackTrace() << cf::exception::systemMessage();
258 }
259 }
260
261 return 0;
262}
Note: See TracBrowser for help on using the repository browser.