config_test.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package lnd
  2. import (
  3. "fmt"
  4. "testing"
  5. "github.com/lightningnetwork/lnd/chainreg"
  6. "github.com/lightningnetwork/lnd/routing"
  7. "github.com/stretchr/testify/require"
  8. )
  9. var (
  10. testPassword = "testpassword"
  11. redactedPassword = "[redacted]"
  12. )
  13. // TestConfigToFlatMap tests that the configToFlatMap function works as
  14. // expected on the default configuration.
  15. func TestConfigToFlatMap(t *testing.T) {
  16. cfg := DefaultConfig()
  17. cfg.BitcoindMode.RPCPass = testPassword
  18. cfg.BtcdMode.RPCPass = testPassword
  19. cfg.Tor.Password = testPassword
  20. cfg.DB.Etcd.Pass = testPassword
  21. cfg.DB.Postgres.Dsn = testPassword
  22. // Set a deprecated field.
  23. cfg.Bitcoin.Active = true
  24. result, deprecated, err := configToFlatMap(cfg)
  25. require.NoError(t, err)
  26. // Check that the deprecated option has been parsed out.
  27. require.Contains(t, deprecated, "bitcoin.active")
  28. // Pick a couple of random values to check.
  29. require.Equal(t, DefaultLndDir, result["lnddir"])
  30. require.Equal(
  31. t, fmt.Sprintf("%v", chainreg.DefaultBitcoinTimeLockDelta),
  32. result["bitcoin.timelockdelta"],
  33. )
  34. require.Equal(
  35. t, fmt.Sprintf("%v", routing.DefaultAprioriWeight),
  36. result["routerrpc.apriori.weight"],
  37. )
  38. require.Contains(t, result, "routerrpc.routermacaroonpath")
  39. // Check that sensitive values are not included.
  40. require.Equal(t, redactedPassword, result["bitcoind.rpcpass"])
  41. require.Equal(t, redactedPassword, result["btcd.rpcpass"])
  42. require.Equal(t, redactedPassword, result["tor.password"])
  43. require.Equal(t, redactedPassword, result["db.etcd.pass"])
  44. require.Equal(t, redactedPassword, result["db.postgres.dsn"])
  45. }
  46. // TestSupplyEnvValue tests that the supplyEnvValue function works as
  47. // expected on the passed inputs.
  48. func TestSupplyEnvValue(t *testing.T) {
  49. // Mock environment variables for testing.
  50. t.Setenv("EXISTING_VAR", "existing_value")
  51. t.Setenv("EMPTY_VAR", "")
  52. tests := []struct {
  53. input string
  54. expected string
  55. description string
  56. }{
  57. {
  58. input: "$EXISTING_VAR",
  59. expected: "existing_value",
  60. description: "Valid environment variable without " +
  61. "default value",
  62. },
  63. {
  64. input: "${EXISTING_VAR:-default_value}",
  65. expected: "existing_value",
  66. description: "Valid environment variable with " +
  67. "default value",
  68. },
  69. {
  70. input: "$NON_EXISTENT_VAR",
  71. expected: "",
  72. description: "Non-existent environment variable " +
  73. "without default value",
  74. },
  75. {
  76. input: "${NON_EXISTENT_VAR:-default_value}",
  77. expected: "default_value",
  78. description: "Non-existent environment variable " +
  79. "with default value",
  80. },
  81. {
  82. input: "$EMPTY_VAR",
  83. expected: "",
  84. description: "Empty environment variable without " +
  85. "default value",
  86. },
  87. {
  88. input: "${EMPTY_VAR:-default_value}",
  89. expected: "default_value",
  90. description: "Empty environment variable with " +
  91. "default value",
  92. },
  93. {
  94. input: "raw_input",
  95. expected: "raw_input",
  96. description: "Raw input - no matching format",
  97. },
  98. }
  99. for _, test := range tests {
  100. t.Run(test.description, func(t *testing.T) {
  101. result := supplyEnvValue(test.input)
  102. require.Equal(t, test.expected, result)
  103. })
  104. }
  105. }