Je tente de tester une fonction qui récupère un cookie à partir d'une requête dans Go. Toutefois, même s'ils ont la même valeur, la comparaison échoue.Test du cookie renvoyé par la fonction dans Go
package main
import (
"fmt"
"log"
"net/http"
"net/http/httptest"
"reflect"
)
func GetCookie(url string) *http.Cookie {
req, err := http.NewRequest("GET", url, nil)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
client := http.DefaultClient
res, err := client.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
cookies := res.Cookies()
var mycookie *http.Cookie
for _, c := range cookies {
if c.Name == "mycookie" {
mycookie = c
}
}
return mycookie
}
func main() {
validCookie := &http.Cookie{
Name: "mycookie",
Value: "SomeValue",
Path: "/mysite",
HttpOnly: true,
Secure: true,
}
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
http.SetCookie(w, validCookie)
w.Header().Set("Content-Type", "text/plain")
w.WriteHeader(200)
}))
defer ts.Close()
fmt.Printf("EqualL Cookies: %t\n", reflect.DeepEqual(validCookie, validCookie))
if got := GetCookie(ts.URL); !reflect.DeepEqual(got, validCookie) {
log.Fatalf("NOT THE SAME\n got = '%v'\nwant = '%v'", got, validCookie)
}
}
lien Playground: https://play.golang.org/p/T4dbZycMuT
J'ai vérifié la documentation sur la fonction DeepEqual et de ce que je peux voir les 2 struct/pointeur doit être la même (spécialement étant donné que Cookie n'a pas de champ non exportées).
Je peux changer la fonction pour comparer les chaînes de cookie mais je voudrais savoir s'il y a une explication simple pourquoi ceci ne fonctionne pas ou est-ce dû à "l'incohérence" comme la documentation spécifie. Existe-t-il un moyen de tester la structure plutôt que la représentation sous forme de chaîne dans ce scénario (Ou est-ce que j'ai fait une erreur peut-être)?