void tst_QBluetoothTransferRequest::tst_construction() { QFETCH(QBluetoothAddress, address); QFETCH(tst_QBluetoothTransferRequest_QParameterMap, parameters); QBluetoothTransferRequest transferRequest(address); foreach (int key, parameters.keys()) { transferRequest.setAttribute((QBluetoothTransferRequest::Attribute)key, parameters[key]); QCOMPARE(parameters[key], transferRequest.attribute((QBluetoothTransferRequest::Attribute)key)); } QCOMPARE(transferRequest.address(), address); QBluetoothTransferRequest copyRequest(transferRequest); QCOMPARE(copyRequest.address(), address); QCOMPARE(transferRequest, copyRequest); }
void tst_QBluetoothTransferRequest::tst_assignment() { QFETCH(QBluetoothAddress, address); QFETCH(tst_QBluetoothTransferRequest_QParameterMap, parameters); QBluetoothTransferRequest transferRequest(address); foreach (int key, parameters.keys()) { transferRequest.setAttribute((QBluetoothTransferRequest::Attribute)key, parameters[key]); } { QBluetoothTransferRequest copyRequest = transferRequest; QCOMPARE(copyRequest.address(), address); QCOMPARE(transferRequest, copyRequest); } { QBluetoothTransferRequest copyRequest(QBluetoothAddress("000000000001")); copyRequest = transferRequest; QCOMPARE(copyRequest.address(), address); QCOMPARE(transferRequest, copyRequest); } { QBluetoothTransferRequest copyRequest1(QBluetoothAddress("000000000001")); QBluetoothTransferRequest copyRequest2(QBluetoothAddress("000000000001")); copyRequest1 = copyRequest2 = transferRequest; QCOMPARE(copyRequest1.address(), address); QCOMPARE(copyRequest2.address(), address); QCOMPARE(transferRequest, copyRequest1); QCOMPARE(transferRequest, copyRequest2); } }
TEST(RequestSerializationTest, UrlTests) { { WdtUri uri("wdt://blah.com?k1=v1&k2=v2&k3=v3.1,v3.2"); EXPECT_EQ(uri.getErrorCode(), OK); EXPECT_EQ(uri.getHostName(), "blah.com"); EXPECT_EQ(uri.getQueryParam("k1"), "v1"); EXPECT_EQ(uri.getQueryParam("k2"), "v2"); EXPECT_EQ(uri.getQueryParam("k3"), "v3.1,v3.2"); EXPECT_EQ(uri.getQueryParams().size(), 3); uri = "wdt://blah?name=first,second"; EXPECT_EQ(uri.getErrorCode(), OK); EXPECT_EQ(uri.getQueryParam("name"), "first,second"); uri = "http://blah.com?name=test"; ASSERT_TRUE(uri.getHostName().empty()); uri = "wdt://localhost"; EXPECT_EQ(uri.getErrorCode(), OK); EXPECT_EQ(uri.getHostName(), "localhost"); uri = "wdt://localhost.facebook.com?key=value1,value2"; EXPECT_EQ(uri.getHostName(), "localhost.facebook.com"); EXPECT_EQ(uri.getQueryParam("key"), "value1,value2"); uri = "wdt://127.0.0.1?"; EXPECT_EQ(uri.getHostName(), "127.0.0.1"); EXPECT_EQ(uri.getQueryParams().size(), 0); uri = "wdt://127.0.0.1?a"; EXPECT_EQ(uri.getHostName(), "127.0.0.1"); EXPECT_EQ(uri.getQueryParams().size(), 1); EXPECT_EQ(uri.generateUrl(), "wdt://127.0.0.1?a="); uri = "wdt://?a=10"; EXPECT_NE(uri.getErrorCode(), OK); vector<string> keys; vector<string> values; WdtUri wdtUri; for (int i = 0; i < 100; i++) { keys.push_back(to_string(rand32())); values.push_back(to_string(rand32())); } for (size_t i = 0; i < keys.size(); i++) { wdtUri.setQueryParam(keys[i], values[i]); } uri = wdtUri.generateUrl(); EXPECT_NE(uri.getErrorCode(), OK); ASSERT_TRUE(uri.getHostName().empty()); for (size_t i = 0; i < keys.size(); i++) { EXPECT_EQ(uri.getQueryParam(keys[i]), values[i]); } } { // ipv6 uri test WdtUri uri("wdt://[::1]:22356?k1=v1"); EXPECT_EQ(uri.getErrorCode(), OK); EXPECT_EQ(uri.getHostName(), "::1"); EXPECT_EQ(uri.getPort(), 22356); uri = "wdt://[::1]:"; EXPECT_EQ(uri.getErrorCode(), URI_PARSE_ERROR); EXPECT_EQ(uri.getHostName(), "::1"); EXPECT_EQ(uri.getPort(), -1); uri = "wdt://[12::12:1]:1"; EXPECT_EQ(uri.getErrorCode(), OK); EXPECT_EQ(uri.getHostName(), "12::12:1"); EXPECT_EQ(uri.getPort(), 1); uri = "wdt://123.4.5.6:22356"; EXPECT_EQ(uri.getErrorCode(), OK); EXPECT_EQ(uri.getHostName(), "123.4.5.6"); EXPECT_EQ(uri.getPort(), 22356); uri = "wdt://["; EXPECT_EQ(uri.getErrorCode(), URI_PARSE_ERROR); EXPECT_EQ(uri.getHostName(), ""); uri = "wdt://[121"; EXPECT_EQ(uri.getErrorCode(), URI_PARSE_ERROR); EXPECT_EQ(uri.getHostName(), ""); uri = "wdt://[]"; EXPECT_EQ(uri.getErrorCode(), URI_PARSE_ERROR); EXPECT_EQ(uri.getHostName(), ""); uri = "wdt://[]:22356"; EXPECT_EQ(uri.getErrorCode(), URI_PARSE_ERROR); EXPECT_EQ(uri.getHostName(), ""); EXPECT_EQ(uri.getPort(), 22356); uri = "wdt://[::1]:*"; EXPECT_EQ(uri.getErrorCode(), URI_PARSE_ERROR); EXPECT_EQ(uri.getHostName(), "::1"); EXPECT_EQ(uri.getPort(), -1); uri = "wdt://]:22356"; EXPECT_EQ(uri.getErrorCode(), OK); EXPECT_EQ(uri.getHostName(), "]"); EXPECT_EQ(uri.getPort(), 22356); { uri = "wdt://[::1]:24689?num_ports=3"; EXPECT_EQ(uri.getPort(), 24689); WdtTransferRequest transferRequest(uri.generateUrl()); EXPECT_EQ(uri.getErrorCode(), OK); EXPECT_EQ(transferRequest.hostName, "::1"); EXPECT_EQ(transferRequest.ports, WdtTransferRequest::genPortsVector(24689, 3)); } { uri = "wdt://[::1]?num_ports=10"; // missing port WdtTransferRequest transferRequest(uri.generateUrl()); EXPECT_EQ(uri.getErrorCode(), OK); EXPECT_EQ(transferRequest.errorCode, INVALID_REQUEST); EXPECT_EQ(transferRequest.hostName, "::1"); } { uri = "wdt://[::1]:12345?num_ports=abc"; // bad num ports WdtTransferRequest transferRequest(uri.generateUrl()); EXPECT_EQ(uri.getErrorCode(), OK); EXPECT_EQ(transferRequest.errorCode, URI_PARSE_ERROR); EXPECT_EQ(transferRequest.hostName, "::1"); } { uri = "wdt://[::1]:24689?start_port=22356&ports=1,2,3,4"; WdtTransferRequest transferRequest(uri.generateUrl()); EXPECT_EQ(uri.getErrorCode(), OK); EXPECT_EQ(transferRequest.hostName, "::1"); EXPECT_EQ(transferRequest.ports, WdtTransferRequest::genPortsVector(1, 4)); } } { WdtTransferRequest request(123, 5, ""); request.hostName = "host1"; request.transferId = "tid1"; request.protocolVersion = 753; string serialized = request.genWdtUrlWithSecret(); LOG(INFO) << "Serialized " << serialized; WdtTransferRequest deser(serialized); EXPECT_EQ(deser.hostName, "host1"); EXPECT_EQ(deser.transferId, "tid1"); EXPECT_EQ(deser.protocolVersion, 753); EXPECT_EQ(deser.ports.size(), 5); for (int i = 0; i < 5; ++i) { EXPECT_EQ(deser.ports[i], 123 + i); } EXPECT_EQ(deser.errorCode, OK); EXPECT_EQ(deser.genWdtUrlWithSecret(), serialized); EXPECT_EQ(deser, request); } { WdtTransferRequest transferRequest(24689, 1, ""); // Lets not populate anything else transferRequest.hostName = "localhost"; string serializedString = transferRequest.genWdtUrlWithSecret(); LOG(INFO) << serializedString; WdtTransferRequest dummy(serializedString); LOG(INFO) << dummy.getLogSafeString(); EXPECT_EQ(transferRequest, dummy); } { string uri = "wdt://localhost?ports=1&recpv=10"; WdtTransferRequest transferRequest(uri); EXPECT_EQ(transferRequest.errorCode, OK); ASSERT_EQ(transferRequest.ports.size(), 1); EXPECT_EQ(transferRequest.ports[0], 1); } { WdtTransferRequest transferRequest(0, 8, "/dir3/dir4"); Receiver receiver(transferRequest); transferRequest = receiver.init(); EXPECT_EQ(transferRequest.errorCode, OK); ASSERT_TRUE(transferRequest.ports.size() != 0); for (auto port : transferRequest.ports) { ASSERT_TRUE(port != 0); } LOG(INFO) << transferRequest.hostName; ASSERT_TRUE(!transferRequest.hostName.empty()); } { string uri = "wdt://localhost?ports=1,2,3,10&dir=test&recpv=100&id=111"; WdtTransferRequest transferRequest(uri); EXPECT_EQ(transferRequest.errorCode, OK); EXPECT_EQ(transferRequest.hostName, "localhost"); EXPECT_EQ(transferRequest.directory, "test"); EXPECT_EQ(transferRequest.protocolVersion, 100); EXPECT_EQ(transferRequest.transferId, "111"); vector<int32_t> expectedPorts; for (int i = 0; i < 3; i++) { expectedPorts.push_back(i + 1); } expectedPorts.push_back(10); EXPECT_EQ(transferRequest.ports, expectedPorts); } { // missing numports/ports string uri = "wdt://localhost?dir=test&recpv=100&id=111"; WdtTransferRequest transferRequest(uri); EXPECT_EQ(transferRequest.errorCode, INVALID_REQUEST); EXPECT_EQ(transferRequest.genWdtUrlWithSecret(), "INVALID_REQUEST"); } { string url = "wdt://"; WdtTransferRequest transferRequest(url); EXPECT_EQ(transferRequest.errorCode, INVALID_REQUEST); EXPECT_EQ(transferRequest.genWdtUrlWithSecret(), "INVALID_REQUEST"); } { string url = "wdt://localhost:22355?num_ports=3"; WdtTransferRequest transferRequest(url); Receiver receiver(transferRequest); auto retTransferRequest = receiver.init(); EXPECT_EQ(retTransferRequest.errorCode, INVALID_REQUEST); } { string url = "wdt://localhost:22355"; WdtTransferRequest transferRequest(url); Sender sender(transferRequest); auto retTransferRequest = sender.init(); EXPECT_EQ(retTransferRequest.errorCode, INVALID_REQUEST); } { string url = "wdt://localhost:22355?num_ports=3"; WdtTransferRequest transferRequest(url); EXPECT_EQ(transferRequest.errorCode, OK); transferRequest.directory = "blah"; // Artificial error transferRequest.errorCode = ERROR; Receiver receiver(transferRequest); auto retTransferRequest = receiver.init(); EXPECT_EQ(retTransferRequest.errorCode, ERROR); } }