annotate 3rdparty/vmime/tests/net/smtp/SMTPResponseTest.cpp @ 0:a4671277546c tip

created the repository for the thymian project
author ferencd
date Tue, 17 Aug 2021 11:19:54 +0200
parents
children
rev   line source
ferencd@0 1 //
ferencd@0 2 // VMime library (http://www.vmime.org)
ferencd@0 3 // Copyright (C) 2002-2013 Vincent Richard <vincent@vmime.org>
ferencd@0 4 //
ferencd@0 5 // This program is free software; you can redistribute it and/or
ferencd@0 6 // modify it under the terms of the GNU General Public License as
ferencd@0 7 // published by the Free Software Foundation; either version 3 of
ferencd@0 8 // the License, or (at your option) any later version.
ferencd@0 9 //
ferencd@0 10 // This program is distributed in the hope that it will be useful,
ferencd@0 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
ferencd@0 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
ferencd@0 13 // General Public License for more details.
ferencd@0 14 //
ferencd@0 15 // You should have received a copy of the GNU General Public License along
ferencd@0 16 // with this program; if not, write to the Free Software Foundation, Inc.,
ferencd@0 17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
ferencd@0 18 //
ferencd@0 19 // Linking this library statically or dynamically with other modules is making
ferencd@0 20 // a combined work based on this library. Thus, the terms and conditions of
ferencd@0 21 // the GNU General Public License cover the whole combination.
ferencd@0 22 //
ferencd@0 23
ferencd@0 24 #include "tests/testUtils.hpp"
ferencd@0 25
ferencd@0 26 #include "vmime/net/smtp/SMTPResponse.hpp"
ferencd@0 27
ferencd@0 28
ferencd@0 29 VMIME_TEST_SUITE_BEGIN(SMTPResponseTest)
ferencd@0 30
ferencd@0 31 VMIME_TEST_LIST_BEGIN
ferencd@0 32 VMIME_TEST(testSingleLineResponse)
ferencd@0 33 VMIME_TEST(testSingleLineResponseLF)
ferencd@0 34 VMIME_TEST(testMultiLineResponse)
ferencd@0 35 VMIME_TEST(testMultiLineResponseDifferentCode)
ferencd@0 36 VMIME_TEST(testIncompleteMultiLineResponse)
ferencd@0 37 VMIME_TEST(testNoResponseText)
ferencd@0 38 VMIME_TEST(testEnhancedStatusCode)
ferencd@0 39 VMIME_TEST(testNoEnhancedStatusCode)
ferencd@0 40 VMIME_TEST(testInvalidEnhancedStatusCode)
ferencd@0 41 VMIME_TEST_LIST_END
ferencd@0 42
ferencd@0 43
ferencd@0 44 void testSingleLineResponse()
ferencd@0 45 {
ferencd@0 46 vmime::shared_ptr <vmime::net::tracer> tracer;
ferencd@0 47 vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>();
ferencd@0 48 vmime::shared_ptr <vmime::net::timeoutHandler> toh =
ferencd@0 49 vmime::make_shared <testTimeoutHandler>();
ferencd@0 50
ferencd@0 51 socket->localSend("123 Response Text\r\n");
ferencd@0 52
ferencd@0 53 vmime::net::smtp::SMTPResponse::state responseState;
ferencd@0 54
ferencd@0 55 vmime::shared_ptr <vmime::net::smtp::SMTPResponse> resp =
ferencd@0 56 vmime::net::smtp::SMTPResponse::readResponse(tracer, socket, toh, responseState);
ferencd@0 57
ferencd@0 58 VASSERT_EQ("Code", 123, resp->getCode());
ferencd@0 59 VASSERT_EQ("Lines", 1, resp->getLineCount());
ferencd@0 60 VASSERT_EQ("Text", "Response Text", resp->getText());
ferencd@0 61 }
ferencd@0 62
ferencd@0 63 void testSingleLineResponseLF()
ferencd@0 64 {
ferencd@0 65 vmime::shared_ptr <vmime::net::tracer> tracer;
ferencd@0 66 vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>();
ferencd@0 67 vmime::shared_ptr <vmime::net::timeoutHandler> toh =
ferencd@0 68 vmime::make_shared <testTimeoutHandler>();
ferencd@0 69
ferencd@0 70 socket->localSend("123 Response Text\n");
ferencd@0 71
ferencd@0 72 vmime::net::smtp::SMTPResponse::state responseState;
ferencd@0 73
ferencd@0 74 vmime::shared_ptr <vmime::net::smtp::SMTPResponse> resp =
ferencd@0 75 vmime::net::smtp::SMTPResponse::readResponse(tracer, socket, toh, responseState);
ferencd@0 76
ferencd@0 77 VASSERT_EQ("Code", 123, resp->getCode());
ferencd@0 78 VASSERT_EQ("Lines", 1, resp->getLineCount());
ferencd@0 79 VASSERT_EQ("Text", "Response Text", resp->getText());
ferencd@0 80 }
ferencd@0 81
ferencd@0 82 void testMultiLineResponse()
ferencd@0 83 {
ferencd@0 84 vmime::shared_ptr <vmime::net::tracer> tracer;
ferencd@0 85 vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>();
ferencd@0 86 vmime::shared_ptr <vmime::net::timeoutHandler> toh =
ferencd@0 87 vmime::make_shared <testTimeoutHandler>();
ferencd@0 88
ferencd@0 89 socket->localSend
ferencd@0 90 (
ferencd@0 91 "123-Response\r\n"
ferencd@0 92 "123 Text\r\n"
ferencd@0 93 );
ferencd@0 94
ferencd@0 95 vmime::net::smtp::SMTPResponse::state responseState;
ferencd@0 96
ferencd@0 97 vmime::shared_ptr <vmime::net::smtp::SMTPResponse> resp =
ferencd@0 98 vmime::net::smtp::SMTPResponse::readResponse(tracer, socket, toh, responseState);
ferencd@0 99
ferencd@0 100 VASSERT_EQ("Code", 123, resp->getCode());
ferencd@0 101 VASSERT_EQ("Lines", 2, resp->getLineCount());
ferencd@0 102 VASSERT_EQ("Text", "Response\nText", resp->getText());
ferencd@0 103
ferencd@0 104 VASSERT_EQ("Code", 123, resp->getLineAt(0).getCode());
ferencd@0 105 VASSERT_EQ("Text", "Response", resp->getLineAt(0).getText());
ferencd@0 106
ferencd@0 107 VASSERT_EQ("Code", 123, resp->getLineAt(1).getCode());
ferencd@0 108 VASSERT_EQ("Text", "Text", resp->getLineAt(1).getText());
ferencd@0 109 }
ferencd@0 110
ferencd@0 111 void testMultiLineResponseDifferentCode()
ferencd@0 112 {
ferencd@0 113 vmime::shared_ptr <vmime::net::tracer> tracer;
ferencd@0 114 vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>();
ferencd@0 115 vmime::shared_ptr <vmime::net::timeoutHandler> toh =
ferencd@0 116 vmime::make_shared <testTimeoutHandler>();
ferencd@0 117
ferencd@0 118 socket->localSend
ferencd@0 119 (
ferencd@0 120 "123-Response\r\n"
ferencd@0 121 "456 Text\r\n"
ferencd@0 122 );
ferencd@0 123
ferencd@0 124 vmime::net::smtp::SMTPResponse::state responseState;
ferencd@0 125
ferencd@0 126 vmime::shared_ptr <vmime::net::smtp::SMTPResponse> resp =
ferencd@0 127 vmime::net::smtp::SMTPResponse::readResponse(tracer, socket, toh, responseState);
ferencd@0 128
ferencd@0 129 VASSERT_EQ("Code", 0, resp->getCode());
ferencd@0 130 VASSERT_EQ("Lines", 2, resp->getLineCount());
ferencd@0 131 VASSERT_EQ("Text", "Response\nText", resp->getText());
ferencd@0 132
ferencd@0 133 VASSERT_EQ("Code", 123, resp->getLineAt(0).getCode());
ferencd@0 134 VASSERT_EQ("Text", "Response", resp->getLineAt(0).getText());
ferencd@0 135
ferencd@0 136 VASSERT_EQ("Code", 456, resp->getLineAt(1).getCode());
ferencd@0 137 VASSERT_EQ("Text", "Text", resp->getLineAt(1).getText());
ferencd@0 138 }
ferencd@0 139
ferencd@0 140 void testIncompleteMultiLineResponse()
ferencd@0 141 {
ferencd@0 142 vmime::shared_ptr <vmime::net::tracer> tracer;
ferencd@0 143 vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>();
ferencd@0 144 vmime::shared_ptr <vmime::net::timeoutHandler> toh =
ferencd@0 145 vmime::make_shared <testTimeoutHandler>(1);
ferencd@0 146
ferencd@0 147 socket->localSend
ferencd@0 148 (
ferencd@0 149 "123-Response\r\n"
ferencd@0 150 "123-Text\r\n"
ferencd@0 151 // Missing data
ferencd@0 152 );
ferencd@0 153
ferencd@0 154 vmime::net::smtp::SMTPResponse::state responseState;
ferencd@0 155
ferencd@0 156 VASSERT_THROW("Incomplete response",
ferencd@0 157 vmime::net::smtp::SMTPResponse::readResponse(tracer, socket, toh, responseState),
ferencd@0 158 vmime::exceptions::operation_timed_out);
ferencd@0 159 }
ferencd@0 160
ferencd@0 161 void testNoResponseText()
ferencd@0 162 {
ferencd@0 163 vmime::shared_ptr <vmime::net::tracer> tracer;
ferencd@0 164 vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>();
ferencd@0 165 vmime::shared_ptr <vmime::net::timeoutHandler> toh =
ferencd@0 166 vmime::make_shared <testTimeoutHandler>(1);
ferencd@0 167
ferencd@0 168 socket->localSend
ferencd@0 169 (
ferencd@0 170 "250\r\n"
ferencd@0 171 );
ferencd@0 172
ferencd@0 173 vmime::net::smtp::SMTPResponse::state responseState;
ferencd@0 174
ferencd@0 175 vmime::shared_ptr <vmime::net::smtp::SMTPResponse> resp =
ferencd@0 176 vmime::net::smtp::SMTPResponse::readResponse(tracer, socket, toh, responseState);
ferencd@0 177
ferencd@0 178 VASSERT_EQ("Code", 250, resp->getCode());
ferencd@0 179 VASSERT_EQ("Lines", 1, resp->getLineCount());
ferencd@0 180 VASSERT_EQ("Text", "", resp->getText());
ferencd@0 181 }
ferencd@0 182
ferencd@0 183 void testEnhancedStatusCode()
ferencd@0 184 {
ferencd@0 185 vmime::shared_ptr <vmime::net::tracer> tracer;
ferencd@0 186 vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>();
ferencd@0 187 vmime::shared_ptr <vmime::net::timeoutHandler> toh =
ferencd@0 188 vmime::make_shared <testTimeoutHandler>();
ferencd@0 189
ferencd@0 190 socket->localSend("250 2.1.5 OK fu13sm4720601wic.7 - gsmtp\r\n");
ferencd@0 191
ferencd@0 192 vmime::net::smtp::SMTPResponse::state responseState;
ferencd@0 193
ferencd@0 194 vmime::shared_ptr <vmime::net::smtp::SMTPResponse> resp =
ferencd@0 195 vmime::net::smtp::SMTPResponse::readResponse(tracer, socket, toh, responseState);
ferencd@0 196
ferencd@0 197 VASSERT_EQ("Code", 250, resp->getCode());
ferencd@0 198 VASSERT_EQ("Lines", 1, resp->getLineCount());
ferencd@0 199 VASSERT_EQ("Text", "2.1.5 OK fu13sm4720601wic.7 - gsmtp", resp->getText());
ferencd@0 200 VASSERT_EQ("Enh.class", 2, resp->getEnhancedCode().klass);
ferencd@0 201 VASSERT_EQ("Enh.subject", 1, resp->getEnhancedCode().subject);
ferencd@0 202 VASSERT_EQ("Enh.detail", 5, resp->getEnhancedCode().detail);
ferencd@0 203 }
ferencd@0 204
ferencd@0 205 void testNoEnhancedStatusCode()
ferencd@0 206 {
ferencd@0 207 vmime::shared_ptr <vmime::net::tracer> tracer;
ferencd@0 208 vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>();
ferencd@0 209 vmime::shared_ptr <vmime::net::timeoutHandler> toh =
ferencd@0 210 vmime::make_shared <testTimeoutHandler>();
ferencd@0 211
ferencd@0 212 socket->localSend("354 Go ahead fu13sm4720601wic.7 - gsmtp\r\n");
ferencd@0 213
ferencd@0 214 vmime::net::smtp::SMTPResponse::state responseState;
ferencd@0 215
ferencd@0 216 vmime::shared_ptr <vmime::net::smtp::SMTPResponse> resp =
ferencd@0 217 vmime::net::smtp::SMTPResponse::readResponse(tracer, socket, toh, responseState);
ferencd@0 218
ferencd@0 219 VASSERT_EQ("Code", 354, resp->getCode());
ferencd@0 220 VASSERT_EQ("Lines", 1, resp->getLineCount());
ferencd@0 221 VASSERT_EQ("Text", "Go ahead fu13sm4720601wic.7 - gsmtp", resp->getText());
ferencd@0 222 VASSERT_EQ("Enh.class", 0, resp->getEnhancedCode().klass);
ferencd@0 223 VASSERT_EQ("Enh.subject", 0, resp->getEnhancedCode().subject);
ferencd@0 224 VASSERT_EQ("Enh.detail", 0, resp->getEnhancedCode().detail);
ferencd@0 225 }
ferencd@0 226
ferencd@0 227 void testInvalidEnhancedStatusCode()
ferencd@0 228 {
ferencd@0 229 vmime::shared_ptr <vmime::net::tracer> tracer;
ferencd@0 230 vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>();
ferencd@0 231 vmime::shared_ptr <vmime::net::timeoutHandler> toh =
ferencd@0 232 vmime::make_shared <testTimeoutHandler>();
ferencd@0 233
ferencd@0 234 socket->localSend("250 4.2 xxx\r\n");
ferencd@0 235
ferencd@0 236 vmime::net::smtp::SMTPResponse::state responseState;
ferencd@0 237
ferencd@0 238 vmime::shared_ptr <vmime::net::smtp::SMTPResponse> resp =
ferencd@0 239 vmime::net::smtp::SMTPResponse::readResponse(tracer, socket, toh, responseState);
ferencd@0 240
ferencd@0 241 VASSERT_EQ("Code", 250, resp->getCode());
ferencd@0 242 VASSERT_EQ("Lines", 1, resp->getLineCount());
ferencd@0 243 VASSERT_EQ("Text", "4.2 xxx", resp->getText());
ferencd@0 244 VASSERT_EQ("Enh.class", 0, resp->getEnhancedCode().klass);
ferencd@0 245 VASSERT_EQ("Enh.subject", 0, resp->getEnhancedCode().subject);
ferencd@0 246 VASSERT_EQ("Enh.detail", 0, resp->getEnhancedCode().detail);
ferencd@0 247 }
ferencd@0 248
ferencd@0 249 VMIME_TEST_SUITE_END
ferencd@0 250