Openstatus www.openstatus.dev
at main 271 lines 6.2 kB view raw
1package server_test 2 3import ( 4 "testing" 5 6 "connectrpc.com/connect" 7 "github.com/openstatushq/openstatus/apps/private-location/internal/server" 8 private_locationv1 "github.com/openstatushq/openstatus/apps/private-location/proto/private_location/v1" 9) 10 11func TestValidateIngestHTTPRequest(t *testing.T) { 12 tests := []struct { 13 name string 14 req *private_locationv1.IngestHTTPRequest 15 wantErr error 16 }{ 17 { 18 name: "valid request", 19 req: &private_locationv1.IngestHTTPRequest{ 20 MonitorId: "monitor-123", 21 Latency: 100, 22 Timestamp: 1234567890, 23 }, 24 wantErr: nil, 25 }, 26 { 27 name: "valid request with zero latency", 28 req: &private_locationv1.IngestHTTPRequest{ 29 MonitorId: "monitor-123", 30 Latency: 0, 31 Timestamp: 1234567890, 32 }, 33 wantErr: nil, 34 }, 35 { 36 name: "empty monitor_id", 37 req: &private_locationv1.IngestHTTPRequest{ 38 MonitorId: "", 39 Latency: 100, 40 Timestamp: 1234567890, 41 }, 42 wantErr: server.ErrEmptyMonitorID, 43 }, 44 { 45 name: "negative latency", 46 req: &private_locationv1.IngestHTTPRequest{ 47 MonitorId: "monitor-123", 48 Latency: -1, 49 Timestamp: 1234567890, 50 }, 51 wantErr: server.ErrInvalidLatency, 52 }, 53 { 54 name: "zero timestamp", 55 req: &private_locationv1.IngestHTTPRequest{ 56 MonitorId: "monitor-123", 57 Latency: 100, 58 Timestamp: 0, 59 }, 60 wantErr: server.ErrInvalidTimestamp, 61 }, 62 { 63 name: "negative timestamp", 64 req: &private_locationv1.IngestHTTPRequest{ 65 MonitorId: "monitor-123", 66 Latency: 100, 67 Timestamp: -1, 68 }, 69 wantErr: server.ErrInvalidTimestamp, 70 }, 71 } 72 73 for _, tt := range tests { 74 t.Run(tt.name, func(t *testing.T) { 75 err := server.ValidateIngestHTTPRequest(tt.req) 76 if err != tt.wantErr { 77 t.Errorf("ValidateIngestHTTPRequest() error = %v, wantErr %v", err, tt.wantErr) 78 } 79 }) 80 } 81} 82 83func TestValidateIngestTCPRequest(t *testing.T) { 84 tests := []struct { 85 name string 86 req *private_locationv1.IngestTCPRequest 87 wantErr error 88 }{ 89 { 90 name: "valid request", 91 req: &private_locationv1.IngestTCPRequest{ 92 Id: "tcp-123", 93 Latency: 100, 94 Timestamp: 1234567890, 95 }, 96 wantErr: nil, 97 }, 98 { 99 name: "valid request with zero latency", 100 req: &private_locationv1.IngestTCPRequest{ 101 Id: "tcp-123", 102 Latency: 0, 103 Timestamp: 1234567890, 104 }, 105 wantErr: nil, 106 }, 107 { 108 name: "empty id", 109 req: &private_locationv1.IngestTCPRequest{ 110 Id: "", 111 Latency: 100, 112 Timestamp: 1234567890, 113 }, 114 wantErr: server.ErrEmptyID, 115 }, 116 { 117 name: "negative latency", 118 req: &private_locationv1.IngestTCPRequest{ 119 Id: "tcp-123", 120 Latency: -1, 121 Timestamp: 1234567890, 122 }, 123 wantErr: server.ErrInvalidLatency, 124 }, 125 { 126 name: "zero timestamp", 127 req: &private_locationv1.IngestTCPRequest{ 128 Id: "tcp-123", 129 Latency: 100, 130 Timestamp: 0, 131 }, 132 wantErr: server.ErrInvalidTimestamp, 133 }, 134 { 135 name: "negative timestamp", 136 req: &private_locationv1.IngestTCPRequest{ 137 Id: "tcp-123", 138 Latency: 100, 139 Timestamp: -1, 140 }, 141 wantErr: server.ErrInvalidTimestamp, 142 }, 143 } 144 145 for _, tt := range tests { 146 t.Run(tt.name, func(t *testing.T) { 147 err := server.ValidateIngestTCPRequest(tt.req) 148 if err != tt.wantErr { 149 t.Errorf("ValidateIngestTCPRequest() error = %v, wantErr %v", err, tt.wantErr) 150 } 151 }) 152 } 153} 154 155func TestValidateIngestDNSRequest(t *testing.T) { 156 tests := []struct { 157 name string 158 req *private_locationv1.IngestDNSRequest 159 wantErr error 160 }{ 161 { 162 name: "valid request", 163 req: &private_locationv1.IngestDNSRequest{ 164 Id: "dns-123", 165 Latency: 100, 166 Timestamp: 1234567890, 167 }, 168 wantErr: nil, 169 }, 170 { 171 name: "valid request with zero latency", 172 req: &private_locationv1.IngestDNSRequest{ 173 Id: "dns-123", 174 Latency: 0, 175 Timestamp: 1234567890, 176 }, 177 wantErr: nil, 178 }, 179 { 180 name: "empty id", 181 req: &private_locationv1.IngestDNSRequest{ 182 Id: "", 183 Latency: 100, 184 Timestamp: 1234567890, 185 }, 186 wantErr: server.ErrEmptyID, 187 }, 188 { 189 name: "negative latency", 190 req: &private_locationv1.IngestDNSRequest{ 191 Id: "dns-123", 192 Latency: -1, 193 Timestamp: 1234567890, 194 }, 195 wantErr: server.ErrInvalidLatency, 196 }, 197 { 198 name: "zero timestamp", 199 req: &private_locationv1.IngestDNSRequest{ 200 Id: "dns-123", 201 Latency: 100, 202 Timestamp: 0, 203 }, 204 wantErr: server.ErrInvalidTimestamp, 205 }, 206 { 207 name: "negative timestamp", 208 req: &private_locationv1.IngestDNSRequest{ 209 Id: "dns-123", 210 Latency: 100, 211 Timestamp: -1, 212 }, 213 wantErr: server.ErrInvalidTimestamp, 214 }, 215 } 216 217 for _, tt := range tests { 218 t.Run(tt.name, func(t *testing.T) { 219 err := server.ValidateIngestDNSRequest(tt.req) 220 if err != tt.wantErr { 221 t.Errorf("ValidateIngestDNSRequest() error = %v, wantErr %v", err, tt.wantErr) 222 } 223 }) 224 } 225} 226 227func TestNewValidationError(t *testing.T) { 228 tests := []struct { 229 name string 230 err error 231 wantCode connect.Code 232 wantContains string 233 }{ 234 { 235 name: "empty monitor id error", 236 err: server.ErrEmptyMonitorID, 237 wantCode: connect.CodeInvalidArgument, 238 wantContains: "monitor_id is required", 239 }, 240 { 241 name: "empty id error", 242 err: server.ErrEmptyID, 243 wantCode: connect.CodeInvalidArgument, 244 wantContains: "id is required", 245 }, 246 { 247 name: "invalid latency error", 248 err: server.ErrInvalidLatency, 249 wantCode: connect.CodeInvalidArgument, 250 wantContains: "latency must be non-negative", 251 }, 252 { 253 name: "invalid timestamp error", 254 err: server.ErrInvalidTimestamp, 255 wantCode: connect.CodeInvalidArgument, 256 wantContains: "timestamp must be positive", 257 }, 258 } 259 260 for _, tt := range tests { 261 t.Run(tt.name, func(t *testing.T) { 262 connErr := server.NewValidationError(tt.err) 263 if connErr.Code() != tt.wantCode { 264 t.Errorf("NewValidationError() code = %v, want %v", connErr.Code(), tt.wantCode) 265 } 266 if connErr.Message() == "" { 267 t.Error("NewValidationError() message should not be empty") 268 } 269 }) 270 } 271}