blob: ff1e3169b779af5a71846a05a6d1130df7322181 [file] [log] [blame]
package config
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
import (
"testing"
)
const exampleTMConfig = `
{
"monitor_config_polling_interval_ms": 5000,
"http_timeout_ms": 30000,
"peer_optimistic_quorum_min": 3,
"max_events": 200,
"health_flush_interval_ms": 1000,
"stat_flush_interval_ms": 1000,
"stat_polling": false,
"distributed_polling": true,
"log_location_access": "access.log",
"log_location_event": "event.log",
"log_location_error": "error.log",
"log_location_warning": "warning.log",
"log_location_info": "info.log",
"log_location_debug": "debug.log",
"serve_read_timeout_ms": 10000,
"serve_write_timeout_ms": 10000,
"stat_buffer_interval_ms": 20000,
"short_hostname_override": "foobar",
"traffic_ops_disk_retry_max": 35,
"crconfig_backup_file": "crconfig.asdf",
"tmconfig_backup_file": "tmconfig.asdf",
"http_polling_format": "thisformatdoesnotexist",
"static_file_dir": "static/"
}
`
const exampleBadTMConfig = `
{
"monitor_config_polling_interval_ms": 5000,
"http_timeout_ms": 30000,
"peer_optimistic_quorum_min": 3,
"max_events": 200,
"health_flush_interval_ms": 1000,
"stat_flush_interval_ms": 1000,
"stat_polling": true,
"distributed_polling": true,
"log_location_access": "access.log",
"log_location_event": "event.log",
"log_location_error": "error.log",
"log_location_warning": "warning.log",
"log_location_info": "info.log",
"log_location_debug": "debug.log",
"serve_read_timeout_ms": 10000,
"serve_write_timeout_ms": 10000,
"stat_buffer_interval_ms": 20000,
"short_hostname_override": "foobar",
"traffic_ops_disk_retry_max": 35,
"crconfig_backup_file": "crconfig.asdf",
"tmconfig_backup_file": "tmconfig.asdf",
"http_polling_format": "thisformatdoesnotexist",
"static_file_dir": "static/"
}
`
func TestConfigLoad(t *testing.T) {
c, err := LoadBytes([]byte(exampleTMConfig))
if err != nil {
t.Fatalf("loading config bytes - expected: no error, actual: %v", err)
}
if c.StatPolling != false {
t.Errorf("StatPolling - expected: false, actual: %t", c.StatPolling)
}
if c.DistributedPolling != true {
t.Errorf("DistributedPolling - expected: true, actual: %t", c.DistributedPolling)
}
if string(c.WarningLog()) != c.LogLocationWarning {
t.Errorf("warning log location - expected: %s, actual: %s\n", c.LogLocationWarning, string(c.WarningLog()))
}
if string(c.ErrorLog()) != c.LogLocationError {
t.Errorf("error log location - expected: %s, actual: %s\n", c.LogLocationError, string(c.ErrorLog()))
}
if string(c.EventLog()) != c.LogLocationEvent {
t.Errorf("event log location - expected: %s, actual: %s\n", c.LogLocationEvent, string(c.EventLog()))
}
if string(c.InfoLog()) != c.LogLocationInfo {
t.Errorf("info log location - expected: %s, actual: %s\n", c.LogLocationInfo, string(c.InfoLog()))
}
if string(c.DebugLog()) != c.LogLocationDebug {
t.Errorf("debug log location - expected: %s, actual: %s\n", c.LogLocationDebug, string(c.DebugLog()))
}
if c.ShortHostnameOverride != "foobar" {
t.Errorf("ShortHostnameOverride - expected: foobar, actual: %s", c.ShortHostnameOverride)
}
if c.PeerOptimisticQuorumMin != 3 {
t.Errorf("PeerOmptimisticQuorumMin - expected: 3, actual: %d", c.PeerOptimisticQuorumMin)
}
if c.TrafficOpsDiskRetryMax != 35 {
t.Errorf("TrafficOpsDiskRetryMax - expected: 35, actual: %d", c.TrafficOpsDiskRetryMax)
}
if c.CRConfigBackupFile != "crconfig.asdf" {
t.Errorf("CRConfigBackupFile - expected: crconfig.asdf, actual: %s", c.CRConfigBackupFile)
}
if c.TMConfigBackupFile != "tmconfig.asdf" {
t.Errorf("TMConfigBackupFile - expected: tmconfig.asdf, actual: %s", c.TMConfigBackupFile)
}
if c.HTTPPollingFormat != "thisformatdoesnotexist" {
t.Errorf("HTTPPollingFormat - expected: thisformatdoesnotexist, actual: %s", c.HTTPPollingFormat)
}
}
func TestBadConfigLoad(t *testing.T) {
_, err := LoadBytes([]byte(exampleBadTMConfig))
if err == nil {
t.Errorf("loading bad config file (stat_polling and distributed_polling both enabled) -- expected: error, actual: nil")
}
}
func TestConfigLoadDefaults(t *testing.T) {
c, err := LoadBytes([]byte(`{}`))
if err != nil {
t.Fatalf("loading empty config bytes - expected: no error, actual: %v", err)
}
if c.StatPolling != true {
t.Errorf("StatPolling default - expected: true, actual: %t", c.StatPolling)
}
if c.DistributedPolling != false {
t.Errorf("DistributedPolling default - expected: false, actual: %t", c.DistributedPolling)
}
}