diff --git a/confenv/confenv.go b/confenv/confenv.go index 9a95f7ea..5c4f9c19 100644 --- a/confenv/confenv.go +++ b/confenv/confenv.go @@ -81,6 +81,11 @@ func process(env map[string]string, envKey string, rv reflect.Value) error { } mapKey = strings.ToLower(mapKey) + // initialize only if there's at least one key + if rv.IsNil() { + rv.Set(reflect.MakeMap(rt)) + } + nv := rv.MapIndex(reflect.ValueOf(mapKey)) zero := reflect.Value{} if nv == zero { diff --git a/main_test.go b/main_test.go index 3d32905c..f8508538 100644 --- a/main_test.go +++ b/main_test.go @@ -202,6 +202,26 @@ func TestEnvironment(t *testing.T) { }, pa) } +func TestEnvironmentNoFile(t *testing.T) { + os.Setenv("RTSP_PATHS_CAM1_SOURCE", "rtsp://testing") + defer os.Unsetenv("RTSP_PATHS_CAM1_SOURCE") + + p, err := testProgram("{}") + require.NoError(t, err) + defer p.close() + + pa, ok := p.conf.Paths["cam1"] + require.Equal(t, true, ok) + require.Equal(t, &conf.PathConf{ + Source: "rtsp://testing", + SourceUrl: func() *url.URL { + u, _ := url.Parse("rtsp://testing:554") + return u + }(), + SourceProtocol: "udp", + }, pa) +} + func TestPublish(t *testing.T) { for _, conf := range []struct { publishSoft string