2021-09-21 11:21:04 +02:00
|
|
|
package hibp
|
|
|
|
|
|
|
|
import (
|
2021-09-22 13:59:22 +02:00
|
|
|
"fmt"
|
2022-10-29 16:58:56 +02:00
|
|
|
"net/http"
|
2021-09-21 19:47:17 +02:00
|
|
|
"os"
|
2021-09-21 11:21:04 +02:00
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
// TestNew tests the New() function
|
|
|
|
func TestNew(t *testing.T) {
|
|
|
|
hc := New()
|
2022-10-29 15:32:12 +02:00
|
|
|
if *hc.PwnedPassAPI.hibp != hc {
|
2021-09-21 11:21:04 +02:00
|
|
|
t.Errorf("hibp client creation failed")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-22 13:59:22 +02:00
|
|
|
// TestNewWithNil tests the New() function with a nil option
|
|
|
|
func TestNewWithNil(t *testing.T) {
|
|
|
|
hc := New(nil)
|
2022-10-29 15:32:12 +02:00
|
|
|
if *hc.PwnedPassAPI.hibp != hc {
|
2021-09-22 13:59:22 +02:00
|
|
|
t.Errorf("hibp client creation failed")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-21 18:21:23 +02:00
|
|
|
// TestNewWithHttpTimeout tests the New() function with the http timeout option
|
2021-09-21 11:21:04 +02:00
|
|
|
func TestNewWithHttpTimeout(t *testing.T) {
|
2022-10-29 15:32:12 +02:00
|
|
|
hc := New(WithHTTPTimeout(time.Second * 10))
|
2021-09-21 11:21:04 +02:00
|
|
|
if hc.to != time.Second*10 {
|
|
|
|
t.Errorf("hibp client timeout option was not set properly. Expected %d, got: %d",
|
|
|
|
time.Second*10, hc.to)
|
|
|
|
}
|
|
|
|
}
|
2021-09-21 18:21:23 +02:00
|
|
|
|
|
|
|
// TestNewWithPwnedPadding tests the New() function with the PwnedPadding option
|
|
|
|
func TestNewWithPwnedPadding(t *testing.T) {
|
|
|
|
hc := New(WithPwnedPadding())
|
2022-10-29 15:32:12 +02:00
|
|
|
if !hc.PwnedPassAPIOpts.WithPadding {
|
2023-02-09 17:07:20 +01:00
|
|
|
t.Errorf("hibp client pwned padding option was not set properly. Expected %t, got: %t",
|
2022-10-29 15:32:12 +02:00
|
|
|
true, hc.PwnedPassAPIOpts.WithPadding)
|
2021-09-21 18:21:23 +02:00
|
|
|
}
|
|
|
|
}
|
2021-09-21 19:47:17 +02:00
|
|
|
|
2023-02-09 17:07:20 +01:00
|
|
|
// TestNewWithPwnedNTLMHash tests the New() function with the PwnedPadding option
|
|
|
|
func TestNewWithPwnedNTLMHash(t *testing.T) {
|
|
|
|
hc := New(WithPwnedNTLMHash())
|
|
|
|
if hc.PwnedPassAPIOpts.HashMode != HashModeNTLM {
|
|
|
|
t.Errorf("hibp client NTLM hash mode option was not set properly. Expected %d, got: %d",
|
|
|
|
HashModeNTLM, hc.PwnedPassAPIOpts.HashMode)
|
|
|
|
}
|
|
|
|
hc = New()
|
|
|
|
if hc.PwnedPassAPIOpts.HashMode != HashModeSHA1 {
|
|
|
|
t.Errorf("hibp client SHA-1 hash mode option was not set properly. Expected %d, got: %d",
|
|
|
|
HashModeSHA1, hc.PwnedPassAPIOpts.HashMode)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-21 19:47:17 +02:00
|
|
|
// TestNewWithApiKey tests the New() function with the API key set
|
|
|
|
func TestNewWithApiKey(t *testing.T) {
|
|
|
|
apiKey := os.Getenv("HIBP_API_KEY")
|
2022-10-29 15:32:12 +02:00
|
|
|
hc := New(WithAPIKey(apiKey), WithRateLimitSleep())
|
2021-09-21 19:47:17 +02:00
|
|
|
if hc.ak != apiKey {
|
|
|
|
t.Errorf("hibp client API key was not set properly. Expected %s, got: %s",
|
|
|
|
apiKey, hc.ak)
|
|
|
|
}
|
|
|
|
}
|
2021-09-22 13:59:22 +02:00
|
|
|
|
|
|
|
// TestNewWithUserAgent tests the New() function with a custom user agent
|
|
|
|
func TestNewWithUserAgent(t *testing.T) {
|
|
|
|
hc := New()
|
|
|
|
if hc.ua != DefaultUserAgent {
|
|
|
|
t.Errorf("hibp client default user agent was not set properly. Expected %s, got: %s",
|
|
|
|
DefaultUserAgent, hc.ua)
|
|
|
|
}
|
|
|
|
|
|
|
|
custUA := fmt.Sprintf("customUA v%s", Version)
|
|
|
|
hc = New(WithUserAgent(custUA))
|
|
|
|
if hc.ua != custUA {
|
|
|
|
t.Errorf("hibp client custom user agent was not set properly. Expected %s, got: %s",
|
|
|
|
custUA, hc.ua)
|
|
|
|
}
|
2022-04-12 22:52:24 +02:00
|
|
|
|
|
|
|
hc = New(WithUserAgent(""))
|
|
|
|
if hc.ua != DefaultUserAgent {
|
|
|
|
t.Errorf("hibp client custom user agent was not set properly. Expected %s, got: %s",
|
|
|
|
DefaultUserAgent, hc.ua)
|
|
|
|
}
|
2021-09-22 13:59:22 +02:00
|
|
|
}
|
2022-10-29 16:58:56 +02:00
|
|
|
|
|
|
|
func TestClient_HTTPReq(t *testing.T) {
|
|
|
|
u1 := "this://is.invalid.tld/with/invalid/chars/" + string([]byte{0x7f})
|
|
|
|
u2 := "this://is.invalid.tld/"
|
|
|
|
hc := New()
|
|
|
|
_, err := hc.HTTPReq(http.MethodGet, u1, map[string]string{"foo": "bar"})
|
|
|
|
if err == nil {
|
|
|
|
t.Errorf("HTTP GET request was supposed to fail, but didn't")
|
|
|
|
}
|
|
|
|
_, err = hc.HTTPReq("äöü", u2, map[string]string{"foo": "bar"})
|
|
|
|
if err == nil {
|
|
|
|
t.Errorf("HTTP GET request was supposed to fail, but didn't")
|
|
|
|
}
|
|
|
|
_, err = hc.HTTPReq("POST", u2, map[string]string{"foo": "bar"})
|
|
|
|
if err != nil {
|
|
|
|
t.Errorf("HTTP POST request failed: %s", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestClient_HTTPResBody(t *testing.T) {
|
|
|
|
u1 := "this://is.invalid.tld/with/invalid/chars/" + string([]byte{0x7f})
|
|
|
|
u2 := "this://is.invalid.tld/"
|
|
|
|
hc := New()
|
|
|
|
_, _, err := hc.HTTPResBody(http.MethodGet, u1, map[string]string{"foo": "bar"})
|
|
|
|
if err == nil {
|
|
|
|
t.Errorf("HTTP GET request was supposed to fail, but didn't")
|
|
|
|
}
|
|
|
|
_, _, err = hc.HTTPResBody("äöü", u2, map[string]string{"foo": "bar"})
|
|
|
|
if err == nil {
|
|
|
|
t.Errorf("HTTP GET request was supposed to fail, but didn't")
|
|
|
|
}
|
|
|
|
_, _, err = hc.HTTPResBody("POST", u2, map[string]string{"foo": "bar"})
|
|
|
|
if err == nil {
|
|
|
|
t.Errorf("HTTP POST request was supposed to fail, but didn't")
|
|
|
|
}
|
|
|
|
}
|