1 /*
2    BAREOS® - Backup Archiving REcovery Open Sourced
3 
4    Copyright (C) 2018-2018 Bareos GmbH & Co. KG
5 
6    This program is Free Software; you can redistribute it and/or
7    modify it under the terms of version three of the GNU Affero General Public
8    License as published by the Free Software Foundation and included
9    in the file LICENSE.
10 
11    This program is distributed in the hope that it will be useful, but
12    WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14    Affero General Public License for more details.
15 
16    You should have received a copy of the GNU Affero General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19    02110-1301, USA.
20 */
21 #include "gtest/gtest.h"
22 #include <memory>
23 #include <stdlib.h>
24 
25 /* test private members */
26 #define protected public
27 #define private public
28 #include "include/bareos.h"
29 
30 
TEST(bsock,bareossockettcp_standard_constructor_test)31 TEST(bsock, bareossockettcp_standard_constructor_test)
32 {
33    std::shared_ptr<BareosSocketTCP> p = std::make_shared<BareosSocketTCP>();
34 
35 /* private BAREOS_SOCKET: */
36    EXPECT_EQ(p->fd_, -1);
37    EXPECT_EQ(p->read_seqno, 0);
38    EXPECT_NE(p->msg, nullptr);
39    EXPECT_NE(p->errmsg,nullptr);
40    EXPECT_EQ(p->spool_fd_, -1);
41    EXPECT_EQ(p->src_addr, nullptr);
42    EXPECT_EQ(p->in_msg_no, 0);
43    EXPECT_EQ(p->out_msg_no, 0);
44    EXPECT_EQ(p->message_length, 0);
45    EXPECT_EQ(p->timer_start, 0);
46    EXPECT_EQ(p->b_errno, 0);
47    EXPECT_EQ(p->blocking_, 1);
48    EXPECT_EQ(p->errors, 0);
49    EXPECT_EQ(p->suppress_error_msgs_, false);
50    EXPECT_EQ(p->sleep_time_after_authentication_error, 5);
51    EXPECT_EQ(p->client_addr.sa_family, AF_UNSPEC);
52    EXPECT_EQ(p->client_addr.sa_data[0], 0);
53    EXPECT_EQ(p->peer_addr.sin_port, 0);
54    EXPECT_EQ(p->peer_addr.sin_addr.s_addr, 0);
55 
56 /* protected BAREOS_SOCKET: */
57    EXPECT_EQ(p->jcr_, nullptr);
58 //   EXPECT_EQ(p->mutex_, PTHREAD_MUTEX_INITIALIZER);
59    EXPECT_EQ(p->who_, nullptr);
60    EXPECT_EQ(p->host_, nullptr);
61    EXPECT_EQ(p->port_ , -1);
62    EXPECT_EQ(p->tid_, nullptr);
63    EXPECT_EQ(p->data_end_, 0);
64    EXPECT_EQ(p->FileIndex_, 0);
65    EXPECT_EQ(p->timed_out_ ? true :false, false);
66    EXPECT_EQ(p->terminated_, false);
67    EXPECT_EQ(p->cloned_, false);
68    EXPECT_EQ(p->spool_, false);
69    EXPECT_EQ(p->use_bursting_, false);
70    EXPECT_EQ(p->use_keepalive_, true);
71    EXPECT_EQ(p->bwlimit_, 0);
72    EXPECT_EQ(p->nb_bytes_, 0);
73    EXPECT_EQ(p->last_tick_, 0);
74    EXPECT_EQ(p->tls_established_, false);
75 }
76 
TEST(bsock,bareossockettcp_copy_constructor_test)77 TEST(bsock, bareossockettcp_copy_constructor_test)
78 {
79 /* private BAREOS_SOCKET */
80    std::shared_ptr<BareosSocketTCP> p = std::make_shared<BareosSocketTCP>();
81 
82    srand(time(NULL));
83 
84    p->fd_ = rand();
85    p->read_seqno = rand();
86 //   POOLMEM *msg; --> already initialized
87 //   POOLMEM *errmsg;  --> already initialized
88    p->spool_fd_ = rand();
89    p->src_addr = (IPADDR *)0x1111;
90    p->in_msg_no = rand();
91    p->out_msg_no = rand();
92    p->message_length = rand();
93    p->timer_start = rand();
94    p->b_errno = rand();
95    p->blocking_ = rand();
96    p->errors = rand();
97    p->suppress_error_msgs_ = true;
98    p->sleep_time_after_authentication_error = rand();
99 
100 /* protected BAREOS_SOCKET: */
101    p->jcr_ = (JobControlRecord *)0x2222;
102 //   p->pthread_mutex_t mutex_; --> MUTEX INITIALIZER
103    p->who_ = (char *)0x3333;
104    p->host_ = (char *)0x4444;
105    p->port_ = rand();
106    p->tid_ = (btimer_t*)0x5555;
107    p->data_end_ = rand();
108    p->FileIndex_ = rand();
109    p->timed_out_ = true;
110    p->terminated_ = true;
111    p->cloned_ = true;
112    p->spool_ = true;
113    p->use_bursting_ = true;
114    p->use_keepalive_ = true;
115    p->bwlimit_ = rand();
116    p->nb_bytes_= rand();
117    p->last_tick_ = rand();
118    p->tls_established_ = true;
119 
120    /* copy p --> q */
121    std::shared_ptr<BareosSocketTCP> q = std::make_shared<BareosSocketTCP>(*p);
122 
123    EXPECT_EQ(p->fd_, q->fd_);
124    EXPECT_EQ(p->read_seqno, q->read_seqno);
125    EXPECT_EQ(p->msg, q->msg);
126    EXPECT_EQ(p->errmsg, q->errmsg);
127 //   POOLMEM *msg; --> already initialized
128 //   POOLMEM *errmsg;  --> already initialized
129    EXPECT_EQ(p->spool_fd_, q->spool_fd_);
130    EXPECT_EQ(p->src_addr, q->src_addr);
131    EXPECT_EQ(p->in_msg_no, q->in_msg_no);
132    EXPECT_EQ(p->out_msg_no, q->out_msg_no);
133    EXPECT_EQ(p->message_length, q->message_length);
134    EXPECT_EQ(p->timer_start, q->timer_start);
135    EXPECT_EQ(p->b_errno, q->b_errno);
136    EXPECT_EQ(p->blocking_, q->blocking_);
137    EXPECT_EQ(p->errors, q->errors);
138    EXPECT_EQ(p->suppress_error_msgs_, q->suppress_error_msgs_);
139    EXPECT_EQ(p->sleep_time_after_authentication_error, q->sleep_time_after_authentication_error);
140 
141 /* protected BAREOS_SOCKET: */
142    EXPECT_EQ(p->jcr_, q->jcr_);
143 //   p->pthread_mutex_t mutex_; --> MUTEX INITIALIZER
144    EXPECT_EQ(p->who_, q->who_);
145    EXPECT_EQ(p->host_, q->host_);
146    EXPECT_EQ(p->port_, q->port_);
147    EXPECT_EQ(p->tid_, q->tid_);
148    EXPECT_EQ(p->data_end_, q->data_end_);
149    EXPECT_EQ(p->FileIndex_, q->FileIndex_);
150    EXPECT_EQ(p->timed_out_, q->timed_out_);
151    EXPECT_EQ(p->terminated_, q->terminated_);
152    EXPECT_EQ(p->cloned_, q->cloned_);
153    EXPECT_EQ(p->spool_, q->spool_);
154    EXPECT_EQ(p->use_bursting_, q->use_bursting_);
155    EXPECT_EQ(p->use_keepalive_, q->use_keepalive_);
156    EXPECT_EQ(p->bwlimit_, q->bwlimit_);
157    EXPECT_EQ(p->nb_bytes_, q->nb_bytes_);
158    EXPECT_EQ(p->last_tick_, q->last_tick_);
159    EXPECT_EQ(p->tls_established_, q->tls_established_);
160 
161 /* prevent invalid test-adresses from being freed */
162    p->src_addr = nullptr;
163    p->who_ = nullptr;
164    p->host_ = nullptr;
165    p->msg = nullptr;
166    p->errmsg = nullptr;
167    p->tid_ = nullptr;
168    p->jcr_ = nullptr;
169 
170    q->src_addr = nullptr;
171    q->who_ = nullptr;
172    q->host_ = nullptr;
173    q->msg = nullptr;
174    q->errmsg = nullptr;
175    q->tid_ = nullptr;
176    q->jcr_ = nullptr;
177 }
178