golanggohlsrtmpwebrtcmedia-serverobs-studiortcprtmp-proxyrtmp-serverrtprtsprtsp-proxyrtsp-relayrtsp-serversrtstreamingwebrtc-proxy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
1.9 KiB
82 lines
1.9 KiB
package conf |
|
|
|
import ( |
|
"os" |
|
"testing" |
|
"time" |
|
|
|
"github.com/stretchr/testify/require" |
|
) |
|
|
|
type subStruct struct { |
|
MyParam int |
|
} |
|
|
|
type mapEntry struct { |
|
MyValue string |
|
MyStruct subStruct |
|
} |
|
|
|
type testStruct struct { |
|
MyString string |
|
MyInt int |
|
MyFloat float64 |
|
MyBool bool |
|
MyDuration StringDuration |
|
MyMap map[string]*mapEntry |
|
MySlice []string |
|
MySliceEmpty []string |
|
} |
|
|
|
func TestEnvironment(t *testing.T) { |
|
os.Setenv("MYPREFIX_MYSTRING", "testcontent") |
|
defer os.Unsetenv("MYPREFIX_MYSTRING") |
|
|
|
os.Setenv("MYPREFIX_MYINT", "123") |
|
defer os.Unsetenv("MYPREFIX_MYINT") |
|
|
|
os.Setenv("MYPREFIX_MYFLOAT", "15.2") |
|
defer os.Unsetenv("MYPREFIX_MYFLOAT") |
|
|
|
os.Setenv("MYPREFIX_MYBOOL", "yes") |
|
defer os.Unsetenv("MYPREFIX_MYBOOL") |
|
|
|
os.Setenv("MYPREFIX_MYDURATION", "22s") |
|
defer os.Unsetenv("MYPREFIX_MYDURATION") |
|
|
|
os.Setenv("MYPREFIX_MYMAP_MYKEY", "") |
|
defer os.Unsetenv("MYPREFIX_MYMAP_MYKEY") |
|
|
|
os.Setenv("MYPREFIX_MYMAP_MYKEY2_MYVALUE", "asd") |
|
defer os.Unsetenv("MYPREFIX_MYMAP_MYKEY2_MYVALUE") |
|
|
|
os.Setenv("MYPREFIX_MYMAP_MYKEY2_MYSTRUCT_MYPARAM", "456") |
|
defer os.Unsetenv("MYPREFIX_MYMAP_MYKEY2_MYSTRUCT_MYPARAM") |
|
|
|
os.Setenv("MYPREFIX_MYSLICE", "val1,val2") |
|
defer os.Unsetenv("MYPREFIX_MYSLICE") |
|
|
|
os.Setenv("MYPREFIX_MYSLICEEMPTY", "") |
|
defer os.Unsetenv("MYPREFIX_MYSLICEEMPTY") |
|
|
|
var s testStruct |
|
err := loadFromEnvironment("MYPREFIX", &s) |
|
require.NoError(t, err) |
|
|
|
require.Equal(t, "testcontent", s.MyString) |
|
require.Equal(t, 123, s.MyInt) |
|
require.Equal(t, 15.2, s.MyFloat) |
|
require.Equal(t, true, s.MyBool) |
|
require.Equal(t, 22*StringDuration(time.Second), s.MyDuration) |
|
|
|
_, ok := s.MyMap["mykey"] |
|
require.Equal(t, true, ok) |
|
|
|
v, ok := s.MyMap["mykey2"] |
|
require.Equal(t, true, ok) |
|
require.Equal(t, "asd", v.MyValue) |
|
require.Equal(t, 456, v.MyStruct.MyParam) |
|
|
|
require.Equal(t, []string{"val1", "val2"}, s.MySlice) |
|
require.Equal(t, []string{}, s.MySliceEmpty) |
|
}
|
|
|