TBR

v: renaming the v directory to go

Change-Id: I4fd9f6ee2895d8034c23b65927eb118980b3c17a
diff --git a/services/identity/util/csrf_test.go b/services/identity/util/csrf_test.go
new file mode 100644
index 0000000..4adefa3
--- /dev/null
+++ b/services/identity/util/csrf_test.go
@@ -0,0 +1,60 @@
+package util
+
+import (
+	"net/http"
+	"net/http/httptest"
+	"strings"
+	"testing"
+)
+
+func TestCSRFTokenWithoutCookie(t *testing.T) {
+	r := newRequest()
+	c := NewCSRFCop()
+	w := httptest.NewRecorder()
+	tok, err := c.NewToken(w, r)
+	if err != nil {
+		t.Errorf("NewToken failed: %v", err)
+	}
+	cookie := cookieSet(w)
+	if len(cookie) == 0 {
+		t.Errorf("Cookie should have been set. Request: [%v], Response: [%v]", r, w)
+	}
+	// Cookie needs to be present for validation
+	r.AddCookie(&http.Cookie{Name: cookieName, Value: cookie})
+	if err := c.ValidateToken(tok, r); err != nil {
+		t.Error("CSRF token failed validation:", err)
+	}
+	if err := c.ValidateToken(tok+"junk", r); err == nil {
+		t.Error("CSRF token should have failed validation")
+	}
+}
+
+func TestCSRFTokenWithCookie(t *testing.T) {
+	r := newRequest()
+	c := NewCSRFCop()
+	w := httptest.NewRecorder()
+	r.AddCookie(&http.Cookie{Name: cookieName, Value: "u776AC7hf794pTtGVlO50w=="})
+	tok, err := c.NewToken(w, r)
+	if err != nil {
+		t.Errorf("NewToken failed: %v", err)
+	}
+	if len(cookieSet(w)) > 0 {
+		t.Errorf("Cookie should not be set when it is already present. Request: [%v], Response: [%v]", r, w)
+	}
+	if err := c.ValidateToken(tok, r); err != nil {
+		t.Error("CSRF token failed validation:", err)
+	}
+	if err := c.ValidateToken(tok+"junk", r); err == nil {
+		t.Error("CSRF token should have failed validation")
+	}
+}
+
+func cookieSet(w *httptest.ResponseRecorder) string {
+	cookies := strings.Split(w.Header().Get("Set-Cookie"), ";")
+	for _, c := range cookies {
+		if strings.HasPrefix(c, cookieName) {
+			return strings.TrimPrefix(c, cookieName+"=")
+		}
+	}
+	return ""
+}