2
0

kvmanager_test.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package kvmanager
  2. import (
  3. "testing"
  4. )
  5. func TestFindAvailablePort(t *testing.T) {
  6. port, err := findAvailablePort()
  7. if err != nil {
  8. t.Fatalf("Failed to find available port: %v", err)
  9. }
  10. if port < 1024 || port > 65535 {
  11. t.Errorf("Port %d is outside valid range 1024-65535", port)
  12. }
  13. }
  14. func TestFindAvailablePortInRange(t *testing.T) {
  15. // Test PizzaKV range (1024-9999)
  16. port, err := findAvailablePortInRange(1024, 9999)
  17. if err != nil {
  18. t.Fatalf("Failed to find available port: %v", err)
  19. }
  20. if port < 1024 || port > 9999 {
  21. t.Errorf("Port %d is outside requested range 1024-9999", port)
  22. }
  23. // Test custom range
  24. port, err = findAvailablePortInRange(5000, 5100)
  25. if err != nil {
  26. t.Fatalf("Failed to find available port in custom range: %v", err)
  27. }
  28. if port < 5000 || port > 5100 {
  29. t.Errorf("Port %d is outside requested range 5000-5100", port)
  30. }
  31. }
  32. func TestParseFlags(t *testing.T) {
  33. tests := []struct {
  34. name string
  35. input string
  36. expected []string
  37. }{
  38. {
  39. name: "empty string",
  40. input: "",
  41. expected: nil,
  42. },
  43. {
  44. name: "single flag",
  45. input: "-iwal",
  46. expected: []string{"-iwal"},
  47. },
  48. {
  49. name: "multiple flags",
  50. input: "-iwal -port=9090",
  51. expected: []string{"-iwal", "-port=9090"},
  52. },
  53. {
  54. name: "flags with quotes",
  55. input: "-path=\"/tmp/my path\" -verbose",
  56. expected: []string{"-path=/tmp/my path", "-verbose"},
  57. },
  58. {
  59. name: "flags with extra spaces",
  60. input: " -iwal -port=9090 ",
  61. expected: []string{"-iwal", "-port=9090"},
  62. },
  63. }
  64. for _, tt := range tests {
  65. t.Run(tt.name, func(t *testing.T) {
  66. result := parseFlags(tt.input)
  67. if len(result) != len(tt.expected) {
  68. t.Errorf("Expected %d args, got %d", len(tt.expected), len(result))
  69. return
  70. }
  71. for i := range result {
  72. if result[i] != tt.expected[i] {
  73. t.Errorf("Arg %d: expected %q, got %q", i, tt.expected[i], result[i])
  74. }
  75. }
  76. })
  77. }
  78. }
  79. func TestParsePort(t *testing.T) {
  80. tests := []struct {
  81. name string
  82. input string
  83. expected int
  84. wantErr bool
  85. }{
  86. {
  87. name: "valid address",
  88. input: "localhost:8085",
  89. expected: 8085,
  90. wantErr: false,
  91. },
  92. {
  93. name: "valid IP address",
  94. input: "127.0.0.1:9090",
  95. expected: 9090,
  96. wantErr: false,
  97. },
  98. {
  99. name: "invalid format",
  100. input: "localhost",
  101. expected: 0,
  102. wantErr: true,
  103. },
  104. {
  105. name: "invalid port",
  106. input: "localhost:abc",
  107. expected: 0,
  108. wantErr: true,
  109. },
  110. }
  111. for _, tt := range tests {
  112. t.Run(tt.name, func(t *testing.T) {
  113. result, err := ParsePort(tt.input)
  114. if tt.wantErr {
  115. if err == nil {
  116. t.Error("Expected error but got none")
  117. }
  118. return
  119. }
  120. if err != nil {
  121. t.Errorf("Unexpected error: %v", err)
  122. return
  123. }
  124. if result != tt.expected {
  125. t.Errorf("Expected port %d, got %d", tt.expected, result)
  126. }
  127. })
  128. }
  129. }
  130. func TestKVInfo(t *testing.T) {
  131. info := &KVInfo{
  132. PID: 12345,
  133. Port: 8085,
  134. Addr: "localhost:8085",
  135. }
  136. if info.PID != 12345 {
  137. t.Errorf("Expected PID 12345, got %d", info.PID)
  138. }
  139. if info.Port != 8085 {
  140. t.Errorf("Expected Port 8085, got %d", info.Port)
  141. }
  142. if info.Addr != "localhost:8085" {
  143. t.Errorf("Expected Addr 'localhost:8085', got %s", info.Addr)
  144. }
  145. }