fix probe_resist_test.go test cases, the repose header['Alt-Svc'] is different from different server

Signed-off-by: johnzhanghua <johnzhanghua@gmail.com>
This commit is contained in:
johnzhanghua 2023-09-25 17:09:37 +10:00
parent 71e3f6ebe4
commit 5b6051e578
2 changed files with 65 additions and 4 deletions

View file

@ -364,6 +364,9 @@ func TestMain(m *testing.M) {
panic(err) panic(err)
} }
// wait server ready for tls dial
time.Sleep(500 * time.Millisecond)
retCode := m.Run() retCode := m.Run()
caddy.Stop() caddy.Stop()

View file

@ -50,7 +50,13 @@ func TestGETAuthWrongProbeResist(t *testing.T) {
responseReference.StatusCode, responseProbeResist.StatusCode) responseReference.StatusCode, responseProbeResist.StatusCode)
} }
if err = responsesAreEqual(responseProbeResist, responseReference); err != nil { if err = responsesAreEqual(responseProbeResist, responseReference); err != nil {
t.Fatal(err) var e errorHeaderAlternativeServiceNotEqual
if !errors.As(err, &e) {
t.Fatal(err)
}
if err = e.CheckAlternativeServiceError(caddyForwardProxyProbeResist.addr, caddyDummyProbeResist.addr); err != nil {
t.Fatal(err)
}
} }
if err = responsesAreEqual(responseProbeResist, responseForwardProxy); err == nil { if err = responsesAreEqual(responseProbeResist, responseForwardProxy); err == nil {
t.Fatalf("Responses from servers with and without Probe Resistance are expected to be different."+ t.Fatalf("Responses from servers with and without Probe Resistance are expected to be different."+
@ -78,7 +84,13 @@ func TestGETAuthWrongProbeResist(t *testing.T) {
responseProbeResist.StatusCode) responseProbeResist.StatusCode)
} }
if err = responsesAreEqual(responseProbeResist, responseReference); err != nil { if err = responsesAreEqual(responseProbeResist, responseReference); err != nil {
t.Fatal(err) var e errorHeaderAlternativeServiceNotEqual
if !errors.As(err, &e) {
t.Fatal(err)
}
if err = e.CheckAlternativeServiceError(caddyForwardProxyProbeResist.addr, caddyDummyProbeResist.addr); err != nil {
t.Fatal(err)
}
} }
if err = responsesAreEqual(responseProbeResist, responseForwardProxy); err == nil { if err = responsesAreEqual(responseProbeResist, responseForwardProxy); err == nil {
t.Fatalf("Responses from servers with and without Probe Resistance are expected to be different."+ t.Fatalf("Responses from servers with and without Probe Resistance are expected to be different."+
@ -174,7 +186,13 @@ func TestConnectAuthWrongProbeResist(t *testing.T) {
responseReference.StatusCode, responseProbeResist.StatusCode) responseReference.StatusCode, responseProbeResist.StatusCode)
} }
if err = responsesAreEqual(responseProbeResist, responseReference); err != nil { if err = responsesAreEqual(responseProbeResist, responseReference); err != nil {
t.Fatal(err) var e errorHeaderAlternativeServiceNotEqual
if !errors.As(err, &e) {
t.Fatal(err)
}
if err = e.CheckAlternativeServiceError(caddyForwardProxyProbeResist.addr, caddyDummyProbeResist.addr); err != nil {
t.Fatal(err)
}
} }
if err = responsesAreEqual(responseProbeResist, responseForwardProxy); err == nil { if err = responsesAreEqual(responseProbeResist, responseForwardProxy); err == nil {
t.Fatalf("Responses from servers with and without Probe Resistance are expected to be different."+ t.Fatalf("Responses from servers with and without Probe Resistance are expected to be different."+
@ -202,7 +220,13 @@ func TestConnectAuthWrongProbeResist(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
if err = responsesAreEqual(responseProbeResist, responseReference); err != nil { if err = responsesAreEqual(responseProbeResist, responseReference); err != nil {
t.Fatal(err) var e errorHeaderAlternativeServiceNotEqual
if !errors.As(err, &e) {
t.Fatal(err)
}
if err = e.CheckAlternativeServiceError(caddyForwardProxyProbeResist.addr, caddyDummyProbeResist.addr); err != nil {
t.Fatal(err)
}
} }
if err = responsesAreEqual(responseProbeResist, responseForwardProxy); err == nil { if err = responsesAreEqual(responseProbeResist, responseForwardProxy); err == nil {
t.Fatalf("Responses from servers with and without Probe Resistance are expected to be different."+ t.Fatalf("Responses from servers with and without Probe Resistance are expected to be different."+
@ -263,6 +287,37 @@ func TestConnectAuthWrongProbeResistRedir(t *testing.T) {
} }
} }
type errorHeaderAlternativeServiceNotEqual struct {
ValueA []string
ValueB []string
}
func (e errorHeaderAlternativeServiceNotEqual) Error() string {
return fmt.Sprintf("header 'Alt-Svc' not equal: %v, %v\n", e.ValueA, e.ValueB)
}
func (e errorHeaderAlternativeServiceNotEqual) CheckAlternativeServiceError(serverAddrA, serverAddrB string) error {
if len(e.ValueA) == 0 || len(e.ValueB) == 0 {
return fmt.Errorf("header 'Alt-Svc' is empty: %w", e)
}
_, port, err := net.SplitHostPort(serverAddrA)
if err != nil {
return fmt.Errorf("failed to split server address :%w", err)
}
if !strings.Contains(e.ValueA[0], port) {
return fmt.Errorf("Alt-Svc address :%s does not contain the server port: %s", e.ValueA[0], port)
}
_, port, err = net.SplitHostPort(serverAddrB)
if err != nil {
return fmt.Errorf("failed to split server address :%w", err)
}
if !strings.Contains(e.ValueB[0], port) {
return fmt.Errorf("Alt-Svc address :%s does not contain the server port: %s", e.ValueB[0], port)
}
return nil
}
// returns nil if are equal // returns nil if are equal
func responsesAreEqual(res1, res2 *http.Response) error { func responsesAreEqual(res1, res2 *http.Response) error {
if res1 == nil { if res1 == nil {
@ -343,6 +398,9 @@ func responsesAreEqual(res1, res2 *http.Response) error {
return fmt.Errorf("header \"%s: %s\" is absent in res2", k1, v1) return fmt.Errorf("header \"%s: %s\" is absent in res2", k1, v1)
} }
if errStr = stringSlicesAreEqual(v1, v2); errStr != "" { if errStr = stringSlicesAreEqual(v1, v2); errStr != "" {
if k1 == "Alt-Svc" {
return errorHeaderAlternativeServiceNotEqual{v1, v2}
}
return fmt.Errorf("header \"%s\" is different: %s", k1, errStr) return fmt.Errorf("header \"%s\" is different: %s", k1, errStr)
} }
} }