iot_server/internal/pkg/config/config_test.go

135 lines
3.3 KiB
Go

//
// Copyright (c) 2019 Intel Corporation
//
// 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.
//
package config
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestGetUrl(t *testing.T) {
expected := "https://localhost:8080"
target := ServiceConfig{
Protocol: "https",
Host: "localhost",
Port: 8080,
Type: "consul",
}
actual := target.GetUrl()
assert.Equal(t, expected, actual)
}
func TestGetProtocol(t *testing.T) {
testCases := []struct {
Name string
Protocol string
Expected string
}{
{
Name: "Protocol Specified",
Protocol: "https",
Expected: "https",
},
{
Name: "Protocol Not Specified",
Protocol: "",
Expected: "http",
},
}
for _, test := range testCases {
t.Run(test.Name, func(t *testing.T) {
target := ServiceConfig{
Protocol: test.Protocol,
}
actual := target.GetProtocol()
assert.Equal(t, test.Expected, actual)
})
}
}
func TestPopulateFromUrl(t *testing.T) {
testCases := []struct {
Name string
Url string
ExpectedType string
ExpectedProtocol string
ExpectedHost string
ExpectedPort int
ExpectedError string
}{
{
Name: "Success, protocol specified",
Url: "consul.https://localhost:8080",
ExpectedType: "consul",
ExpectedProtocol: "https",
ExpectedHost: "localhost",
ExpectedPort: 8080,
},
{
Name: "Success, protocol not specified",
Url: "consul://localhost:8080",
ExpectedType: "consul",
ExpectedProtocol: "http",
ExpectedHost: "localhost",
ExpectedPort: 8080,
},
{
Name: "Bad URL format",
Url: "not a url\r\n",
ExpectedError: "the format of Provider URL is incorrect",
},
{
Name: "Bad Port",
Url: "consul.https:\\localhost:eight",
ExpectedError: "the port from Provider URL is incorrect",
},
{
Name: "Missing Type and Protocol spec",
Url: "://localhost:800",
ExpectedError: "missing protocol scheme",
},
{
Name: "Bad Type and Protocol spec",
Url: "xyz.consul.http://localhost:800",
ExpectedError: "the Type and Protocol spec from Provider URL is incorrect",
},
}
for _, test := range testCases {
t.Run(test.Name, func(t *testing.T) {
target := ServiceConfig{}
err := target.PopulateFromUrl(test.Url)
if test.ExpectedError != "" {
require.Error(t, err)
assert.Contains(t, err.Error(), test.ExpectedError)
return // test is complete
}
assert.Equal(t, test.ExpectedType, target.Type)
assert.Equal(t, test.ExpectedProtocol, target.Protocol)
assert.Equal(t, test.ExpectedHost, target.Host)
assert.Equal(t, test.ExpectedPort, target.Port)
})
}
}