whitelist_test.go 4.4 KB

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