// TestExists validates the ability to load configuration values // using the OS-level environment variables and read them back. func TestExists(t *testing.T) { t.Log("Given the need to read environment variables.") { uStr := "postgres://*****:*****@127.0.0.1:8080/postgres?sslmode=disable" os.Setenv("MYAPP_PROC_ID", "322") os.Setenv("MYAPP_SOCKET", "./tmp/sockets.po") os.Setenv("MYAPP_PORT", "4034") os.Setenv("MYAPP_FLAG", "true") os.Setenv("MYAPP_DSN", uStr) cfg.Init("MYAPP") t.Log("\tWhen given a namspace key to search for that exists.") { proc, err := cfg.Int("PROC_ID") if err != nil { t.Errorf("\t\t%s Should not return error when valid key %q", failed, "PROC_ID") } else { t.Logf("\t\t%s Should not return error when valid key %q", succeed, "PROC_ID") if proc != 322 { t.Errorf("\t\t%s Should have key %q with value %d", failed, "PROC_ID", 322) } else { t.Logf("\t\t%s Should have key %q with value %d", succeed, "PROC_ID", 322) } } socket, err := cfg.String("SOCKET") if err != nil { t.Errorf("\t\t%s Should not return error when valid key %q", failed, "SOCKET") } else { t.Logf("\t\t%s Should not return error when valid key %q", succeed, "SOCKET") if socket != "./tmp/sockets.po" { t.Errorf("\t\t%s Should have key %q with value %q", failed, "SOCKET", "./tmp/sockets.po") } else { t.Logf("\t\t%s Should have key %q with value %q", succeed, "SOCKET", "./tmp/sockets.po") } } port, err := cfg.Int("PORT") if err != nil { t.Errorf("\t\t%s Should not return error when valid key %q", failed, "PORT") } else { t.Logf("\t\t%s Should not return error when valid key %q", succeed, "PORT") if port != 4034 { t.Errorf("\t\t%s Should have key %q with value %d", failed, "PORT", 4034) } else { t.Logf("\t\t%s Should have key %q with value %d", succeed, "PORT", 4034) } } flag, err := cfg.Bool("FLAG") if err != nil { t.Errorf("\t\t%s Should not return error when valid key %q", failed, "FLAG") } else { t.Logf("\t\t%s Should not return error when valid key %q", succeed, "FLAG") if flag == false { t.Errorf("\t\t%s Should have key %q with value %v", failed, "FLAG", true) } else { t.Logf("\t\t%s Should have key %q with value %v", succeed, "FLAG", true) } } u, err := cfg.URL("DSN") if err != nil { t.Errorf("\t\t%s Should not return error when valid key %q", failed, "DSN") } else { t.Logf("\t\t%s Should not return error when valid key %q", succeed, "DSN") if u.String() != uStr { t.Errorf("\t\t%s Should have key %q with value %v", failed, "DSN", true) } else { t.Logf("\t\t%s Should have key %q with value %v", succeed, "DSN", true) } } } } }
// TestSets validates the ability to manually set configuration values. func TestSets(t *testing.T) { t.Log("Given the need to manually set configuration values.") { /* uStr := "postgres://*****:*****@127.0.0.1:8080/postgres?sslmode=disable" Map: map[string]string{ "PROC_ID": "322", "SOCKET": "./tmp/sockets.po", "PORT": "4034", "FLAG": "on", "DSN": uStr, }, */ cfg.Init(cfg.MapProvider{ Map: map[string]string{}, }) t.Log("\tWhen setting values.") { key := "key1" strVal := "bill" cfg.SetString(key, strVal) retStrVal, err := cfg.String(key) if err != nil { t.Errorf("\t\t%s Should find a value for the specified key %q.", failed, key) } else { t.Logf("\t\t%s Should find a value for the specified key %q.", success, key) } if strVal != retStrVal { t.Log(strVal) t.Log(retStrVal) t.Errorf("\t\t%s Should return the string value %q that was set.", failed, strVal) } else { t.Logf("\t\t%s Should return the string value %q that was set.", success, strVal) } key = "key2" intVal := 223 cfg.SetInt(key, intVal) retIntVal, err := cfg.Int(key) if err != nil { t.Errorf("\t\t%s Should find a value for the specified key %q.", failed, key) } else { t.Logf("\t\t%s Should find a value for the specified key %q.", success, key) } if intVal != retIntVal { t.Log(intVal) t.Log(retIntVal) t.Errorf("\t\t%s Should return the int value %d that was set.", failed, intVal) } else { t.Logf("\t\t%s Should return the int value %d that was set.", success, intVal) } key = "key3" timeVal, _ := time.Parse(time.UnixDate, "Mon Oct 27 20:18:15 EST 2016") cfg.SetTime(key, timeVal) retTimeVal, err := cfg.Time(key) if err != nil { t.Errorf("\t\t%s Should find a value for the specified key %q.", failed, key) } else { t.Logf("\t\t%s Should find a value for the specified key %q.", success, key) } if timeVal != retTimeVal { t.Log(timeVal) t.Log(retTimeVal) t.Errorf("\t\t%s Should return the time value %q that was set.", failed, timeVal) } else { t.Logf("\t\t%s Should return the time value %q that was set.", success, timeVal) } key = "key4" boolVal := true cfg.SetBool(key, boolVal) retBoolVal, err := cfg.Bool(key) if err != nil { t.Errorf("\t\t%s Should find a value for the specified key %q.", failed, key) } else { t.Logf("\t\t%s Should find a value for the specified key %q.", success, key) } if boolVal != retBoolVal { t.Log(boolVal) t.Log(retBoolVal) t.Errorf("\t\t%s Should return the bool value \"%v\" that was set.", failed, boolVal) } else { t.Logf("\t\t%s Should return the bool value \"%v\" that was set.", success, boolVal) } key = "key5" urlVal, _ := url.Parse("postgres://*****:*****@127.0.0.1:8080/postgres?sslmode=disable") cfg.SetURL(key, urlVal) retURLVal, err := cfg.URL(key) if err != nil { t.Errorf("\t\t%s Should find a value for the specified key %q.", failed, key) } else { t.Logf("\t\t%s Should find a value for the specified key %q.", success, key) } if urlVal.String() != retURLVal.String() { t.Log(urlVal) t.Log(retURLVal) t.Errorf("\t\t%s Should return the bool value \"%v\" that was set.", failed, urlVal) } else { t.Logf("\t\t%s Should return the bool value \"%v\" that was set.", success, urlVal) } } } }