mirror of
https://github.com/kidfromjupiter/nearby.git
synced 2026-09-14 14:46:12 -04:00
162 lines
5.3 KiB
C++
162 lines
5.3 KiB
C++
// Copyright 2021 Google LLC
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// https://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
#include "internal/network/url.h"
|
|
|
|
#include <sstream>
|
|
|
|
#include "gmock/gmock.h"
|
|
#include "protobuf-matchers/protocol-buffer-matchers.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
namespace nearby {
|
|
namespace network {
|
|
namespace {
|
|
|
|
TEST(Url, TestCreateUrl) {
|
|
auto url = Url::Create("http://www.google.com");
|
|
ASSERT_TRUE(url.ok());
|
|
|
|
EXPECT_EQ(url->GetScheme(), "http");
|
|
EXPECT_EQ(url->GetPort(), 80);
|
|
EXPECT_EQ(url->GetHostName(), "www.google.com");
|
|
|
|
url = Url::Create("https://www.google.com");
|
|
ASSERT_TRUE(url.ok());
|
|
EXPECT_EQ(url->GetScheme(), "https");
|
|
EXPECT_EQ(url->GetPort(), 443);
|
|
|
|
url = Url::Create("https://www.google.com:8443");
|
|
ASSERT_TRUE(url.ok());
|
|
EXPECT_EQ(url->GetPort(), 8443);
|
|
EXPECT_EQ(url->GetUrlPath(), "https://www.google.com:8443");
|
|
}
|
|
|
|
TEST(Url, TestUrlWithPath) {
|
|
auto url = Url::Create("http://www.google.com/users/user/1234");
|
|
ASSERT_TRUE(url.ok());
|
|
EXPECT_EQ(url->GetPath(), "/users/user/1234");
|
|
}
|
|
|
|
TEST(Url, TestUrlWithQuery) {
|
|
auto url = Url::Create("http://www.google.com/user?name=google&age=45");
|
|
ASSERT_TRUE(url.ok());
|
|
auto query_values = url->GetQueryValues("name");
|
|
EXPECT_THAT(query_values, testing::SizeIs(1));
|
|
EXPECT_EQ(query_values[0], "google");
|
|
}
|
|
|
|
TEST(Url, TestUrlWithOneQuery) {
|
|
auto url = Url::Create("http://www.google.com/user?name=google&");
|
|
ASSERT_TRUE(url.ok());
|
|
auto query_values = url->GetQueryValues("name");
|
|
EXPECT_EQ(1u, query_values.size());
|
|
EXPECT_EQ(query_values[0], "google");
|
|
}
|
|
|
|
TEST(Url, TestUrlWithFragment) {
|
|
auto url =
|
|
Url::Create("http://www.google.com/user?name=google&pos=mtv#hello");
|
|
ASSERT_TRUE(url.ok());
|
|
auto query_values = url->GetQueryValues("pos");
|
|
EXPECT_EQ(1u, query_values.size());
|
|
EXPECT_EQ(query_values[0], "mtv");
|
|
EXPECT_EQ(url->GetUrlPath(),
|
|
"http://www.google.com/user?name=google&pos=mtv#hello");
|
|
url->RemoveQueryParameter("pos");
|
|
EXPECT_EQ(0u, url->GetQueryValues("pos").size());
|
|
}
|
|
|
|
TEST(Url, TestGetUrl) {
|
|
auto url = Url::Create("http://www.google.com/user?name=google&pos=mtv");
|
|
ASSERT_TRUE(url.ok());
|
|
EXPECT_EQ(url->GetUrlPath(),
|
|
"http://www.google.com/user?name=google&pos=mtv");
|
|
}
|
|
|
|
TEST(Url, TestAddQueryString) {
|
|
auto url = Url::Create("http://www.google.com/user?name=google&pos=mtv");
|
|
ASSERT_TRUE(url.ok());
|
|
url->AddQueryParameter("test", "good");
|
|
auto new_url = Url::Create(url->GetUrlPath());
|
|
ASSERT_TRUE(new_url.ok());
|
|
auto query_values = new_url->GetQueryValues("test");
|
|
EXPECT_EQ(1u, query_values.size());
|
|
EXPECT_EQ(query_values[0], "good");
|
|
}
|
|
|
|
TEST(Url, TestAddQueryStringWithEncode) {
|
|
auto url = Url::Create("http://www.google.com");
|
|
ASSERT_TRUE(url.ok());
|
|
url->AddQueryParameter("test", "good & bad");
|
|
EXPECT_EQ(url->GetUrlPath(), "http://www.google.com?test=good%20%26%20bad");
|
|
auto new_url = Url::Create(url->GetUrlPath());
|
|
ASSERT_TRUE(new_url.ok());
|
|
auto query_values = new_url->GetQueryValues("test");
|
|
EXPECT_EQ(1u, query_values.size());
|
|
EXPECT_EQ(query_values[0], "good & bad");
|
|
}
|
|
|
|
TEST(Url, TestInvalidUrl) {
|
|
auto url = Url::Create("http:/www.google.com");
|
|
ASSERT_FALSE(url.ok());
|
|
url = Url::Create("ftp://www.google.com");
|
|
ASSERT_FALSE(url.ok());
|
|
url = Url::Create("::::hjskoiskjk");
|
|
ASSERT_FALSE(url.ok());
|
|
url = Url::Create("http://www.google.com:abcd/erwe");
|
|
ASSERT_FALSE(url.ok());
|
|
url = Url::Create("http:///www.google.com");
|
|
ASSERT_FALSE(url.ok());
|
|
}
|
|
|
|
TEST(Url, TestStreamOutput) {
|
|
std::ostringstream stream;
|
|
auto url = Url::Create("https://www.google.com");
|
|
ASSERT_TRUE(url.ok());
|
|
stream << url.value();
|
|
EXPECT_EQ(stream.str(), "https://www.google.com");
|
|
}
|
|
|
|
TEST(Url, TestCompareUrl) {
|
|
auto url1 = Url::Create("https://www.google.com");
|
|
auto url2 = Url::Create("https://www.google.com/");
|
|
ASSERT_TRUE(url1.ok());
|
|
ASSERT_TRUE(url2.ok());
|
|
ASSERT_EQ(url1, url2);
|
|
url1 = Url::Create("https://www.google.com/home?name=test&age=38");
|
|
ASSERT_NE(url1, url2);
|
|
url2 = Url::Create("https://www.google.com/home?age=38&name=test");
|
|
ASSERT_EQ(url1, url2);
|
|
url2 = Url::Create("https://www.google.com/home?age=38&name=test&grade=5");
|
|
ASSERT_NE(url1, url2);
|
|
url2 = Url::Create("https://www.google.com/home?age=38&name=test#fragment");
|
|
ASSERT_NE(url1, url2);
|
|
url2 = Url::Create("https://www.google.com/home?age1=38&name1=test");
|
|
ASSERT_NE(url1, url2);
|
|
url2 = Url::Create("http://www.google.com/home?age1=38&name1=test");
|
|
ASSERT_NE(url1, url2);
|
|
url2 = Url::Create("https://www.google1.com/home?age1=38&name1=test");
|
|
ASSERT_NE(url1, url2);
|
|
url2 = Url::Create("https://www.google.com:8433/home?age=38&name=test");
|
|
ASSERT_NE(url1, url2);
|
|
url2 = Url::Create("https://www.google.com/home?age=38&age=38");
|
|
ASSERT_NE(url2, url1);
|
|
url2 = Url::Create("https://www.google.com/home?age=38&name=test&kk&=888");
|
|
ASSERT_EQ(url1, url2);
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace network
|
|
} // namespace nearby
|