whitelist_test.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. package whitelist
  2. import (
  3. "os"
  4. "testing"
  5. "imuslab.com/arozos/mod/database"
  6. )
  7. var dbFilePath = "../../../../test/"
  8. var dbFileName = "testdb.db"
  9. var sysdb *database.Database
  10. func setupSuite(t *testing.T) func(t *testing.T) {
  11. //t.Log("Setting up database env")
  12. os.Mkdir(dbFilePath, 0777)
  13. file, err := os.Create(dbFilePath + dbFileName)
  14. if err != nil {
  15. t.Fatalf("Failed to create file: %v", err)
  16. }
  17. file.Close()
  18. // Return a function to teardown the test
  19. return func(t *testing.T) {
  20. //t.Log("Cleaning up")
  21. sysdb.Close()
  22. err := os.RemoveAll(dbFilePath)
  23. if err != nil {
  24. t.Fatalf("Failed to clean up: %v", err)
  25. }
  26. }
  27. }
  28. func TestWhiteList_SetWhitelistEnabled(t *testing.T) {
  29. teardownSuite := setupSuite(t)
  30. defer teardownSuite(t)
  31. // Create a new database
  32. var err error
  33. sysdb, err = database.NewDatabase(dbFilePath+dbFileName, false)
  34. if err != nil {
  35. t.Fatalf("Failed to create a new database: %v", err)
  36. }
  37. wl := NewWhitelistManager(sysdb)
  38. // Test case 1: Enable whitelist
  39. wl.SetWhitelistEnabled(true)
  40. if !wl.Enabled {
  41. t.Error("Expected whitelist to be enabled")
  42. }
  43. // Test case 2: Disable whitelist
  44. wl.SetWhitelistEnabled(false)
  45. if wl.Enabled {
  46. t.Error("Expected whitelist to be disabled")
  47. }
  48. }
  49. func TestWhiteList_IsWhitelisted(t *testing.T) {
  50. teardownSuite := setupSuite(t)
  51. defer teardownSuite(t)
  52. // Create a new database
  53. var err error
  54. sysdb, err = database.NewDatabase(dbFilePath+dbFileName, false)
  55. if err != nil {
  56. t.Fatalf("Failed to create a new database: %v", err)
  57. }
  58. wl := NewWhitelistManager(sysdb)
  59. // Test case 1: IP is whitelisted when whitelist is disabled
  60. if !wl.IsWhitelisted("192.168.1.1") {
  61. t.Error("Expected IP to be whitelisted when whitelist is disabled")
  62. }
  63. // Test case 2: Enable whitelist and whitelist specific IP
  64. wl.SetWhitelistEnabled(true)
  65. _ = wl.SetWhitelist("192.168.1.1")
  66. if !wl.IsWhitelisted("192.168.1.1") || wl.IsWhitelisted("192.168.2.1") {
  67. t.Error("Unexpected whitelisting behavior")
  68. }
  69. // Test case 3: Check if reserved IP addresses are always whitelisted
  70. if !wl.IsWhitelisted("127.0.0.1") || !wl.IsWhitelisted("localhost") {
  71. t.Error("Expected reserved IP addresses to be whitelisted")
  72. }
  73. }
  74. func TestWhiteList_ListWhitelistedIpRanges(t *testing.T) {
  75. teardownSuite := setupSuite(t)
  76. defer teardownSuite(t)
  77. // Create a new database
  78. var err error
  79. sysdb, err = database.NewDatabase(dbFilePath+dbFileName, false)
  80. if err != nil {
  81. t.Fatalf("Failed to create a new database: %v", err)
  82. }
  83. wl := NewWhitelistManager(sysdb)
  84. wl.SetWhitelistEnabled(true)
  85. // Test case 1: No whitelisted IP ranges
  86. if len(wl.ListWhitelistedIpRanges()) != 1 {
  87. //t.Log(wl.ListWhitelistedIpRanges())
  88. t.Error("Expected no whitelisted IP ranges")
  89. }
  90. // Test case 2: Whitelisted IP ranges exist
  91. _ = wl.SetWhitelist("192.168.1.1")
  92. _ = wl.SetWhitelist("192.168.2.1-192.168.2.254")
  93. whitelistedRanges := wl.ListWhitelistedIpRanges()
  94. if len(whitelistedRanges) != 3 {
  95. t.Error("Expected 3 whitelisted IP ranges")
  96. }
  97. }
  98. func TestWhiteList_SetWhitelist_UnsetWhitelist(t *testing.T) {
  99. teardownSuite := setupSuite(t)
  100. defer teardownSuite(t)
  101. // Create a new database
  102. var err error
  103. sysdb, err = database.NewDatabase(dbFilePath+dbFileName, false)
  104. if err != nil {
  105. t.Fatalf("Failed to create a new database: %v", err)
  106. }
  107. wl := NewWhitelistManager(sysdb)
  108. wl.SetWhitelistEnabled(true)
  109. // Test case 1: Set whitelist for a specific IP
  110. err = wl.SetWhitelist("192.168.1.1")
  111. if err != nil || !wl.IsWhitelisted("192.168.1.1") {
  112. t.Error("Unexpected error or IP not whitelisted")
  113. }
  114. // Test case 2: Set whitelist for an IP range
  115. err = wl.SetWhitelist("192.168.2.1-192.168.2.254")
  116. if err != nil || !wl.IsWhitelisted("192.168.2.5") {
  117. t.Error("Unexpected error or IP range not whitelisted")
  118. }
  119. // Test case 3: Unset whitelist for a specific IP
  120. err = wl.UnsetWhitelist("192.168.1.1")
  121. if err != nil || wl.IsWhitelisted("192.168.1.1") {
  122. t.Error("Unexpected error or IP still whitelisted")
  123. }
  124. // Test case 4: Unset whitelist for an IP range
  125. err = wl.UnsetWhitelist("192.168.2.1-192.168.2.254")
  126. if err != nil || wl.IsWhitelisted("192.168.2.5") {
  127. t.Error("Unexpected error or IP range still whitelisted")
  128. }
  129. // Test case 5: Unset whitelist for an invalid IP range
  130. err = wl.UnsetWhitelist("invalid-ip-range")
  131. if err == nil {
  132. t.Error("Expected error for invalid IP range")
  133. }
  134. }