blob: 5924921f16109842fd2d13c7ac324f12677c21b9 [file] [log] [blame]
/*
* Copyright 2016 Google Inc. All rights reserved.
*
* 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
*
* http://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 "config.h"
#include <gtest/gtest.h>
#include <gmock/gmock.h>
namespace speedtest {
namespace {
const char *kValidConfig = R"CONFIG(
{
"downloadSize": 10000000,
"intervalSize": 200,
"locationName": "Kansas City",
"maxTransferIntervals": 25,
"maxTransferRunTime": 20000,
"maxTransferVariance": 0.08,
"minTransferIntervals": 10,
"minTransferRunTime": 5000,
"numConcurrentDownloads": 20,
"numConcurrentUploads": 15,
"pingRunTime": 3000,
"pingTimeout": 300,
"transferPortEnd": 3023,
"transferPortStart": 3004,
"uploadSize": 20000000
}
)CONFIG";
const char *kValidServers = R"SERVERS(
{
"locationName": "Kansas City",
"regionalServers": [
"http://austin.speed.googlefiber.net/",
"http://kansas.speed.googlefiber.net/",
"http://provo.speed.googlefiber.net/",
"http://stanford.speed.googlefiber.net/"
]
}
)SERVERS";
const char *kInvalidServers = R"SERVERS(
{
"locationName": "Kansas City",
"regionalServers": [
"example.com..",
]
}
)SERVERS";
const char *kInvalidJson = "{{}{";
TEST(ParseConfigTest, NullConfig_Invalid) {
EXPECT_FALSE(ParseConfig(kValidConfig, nullptr));
}
TEST(ParseConfigTest, EmptyJson_Invalid) {
Config config;
EXPECT_FALSE(ParseConfig("", &config));
}
TEST(ParseConfigTest, InvalidJson_Invalid) {
Config config;
EXPECT_FALSE(ParseConfig(kInvalidJson, &config));
}
TEST(ParseConfigTest, FullConfig_Valid) {
Config config;
EXPECT_TRUE(ParseConfig(kValidConfig, &config));
EXPECT_EQ(10000000, config.download_size);
EXPECT_EQ(20000000, config.upload_size);
EXPECT_EQ(20, config.num_downloads);
EXPECT_EQ(15, config.num_uploads);
EXPECT_EQ(200, config.interval_millis);
EXPECT_EQ("Kansas City", config.location_name);
EXPECT_EQ(10, config.min_transfer_intervals);
EXPECT_EQ(25, config.max_transfer_intervals);
EXPECT_EQ(5000, config.min_transfer_runtime);
EXPECT_EQ(20000, config.max_transfer_runtime);
EXPECT_EQ(0.08, config.max_transfer_variance);
EXPECT_EQ(3000, config.ping_runtime);
EXPECT_EQ(300, config.ping_timeout);
EXPECT_EQ(3004, config.transfer_port_start);
EXPECT_EQ(3023, config.transfer_port_end);
}
TEST(ParseServersTest, NullServers_Invalid) {
EXPECT_FALSE(ParseServers(kValidServers, nullptr));
}
TEST(ParseServersTest, EmptyServers_Invalid) {
std::vector<http::Url> servers;
EXPECT_FALSE(ParseServers("", &servers));
}
TEST(ParseServersTest, InvalidJson_Invalid) {
std::vector<http::Url> servers;
EXPECT_FALSE(ParseServers(kInvalidJson, &servers));
}
TEST(ParseServersTest, FullServers_Valid) {
std::vector<http::Url> servers;
EXPECT_TRUE(ParseServers(kValidServers, &servers));
EXPECT_THAT(servers, testing::UnorderedElementsAre(
http::Url("http://austin.speed.googlefiber.net/"),
http::Url("http://kansas.speed.googlefiber.net/"),
http::Url("http://provo.speed.googlefiber.net/"),
http::Url("http://stanford.speed.googlefiber.net/")));
}
TEST(ParseServersTest, InvalidServers_Invalid) {
std::vector<http::Url> servers;
EXPECT_FALSE(ParseServers(kInvalidServers, &servers));
}
} // namespace
} // namespace speedtest