package decoder

import (
	"testing"

	"euphoria-laxis.fr/go-packages/argon2/encoder"
)

func TestDecoder(t *testing.T) {
	opts := []encoder.OptFunc{
		encoder.SetMemory(32 * 1024), // 32 bits
		encoder.SetParallelism(4),    // 4 concurrent actions
		encoder.SetKeyLength(32),     // key length
		encoder.SetSaltLength(32),    // salt length
		encoder.SetIterations(4),     // 4 iterations, should be fast since there's 4 concurrent actions
	}
	e, _ := encoder.NewEncoder(opts...)
	randomString, err := e.RandomString(32)
	if err != nil {
		t.Fatal(err)
	}
	var hashedString string
	hashedString, err = e.HashString(randomString)
	if err != nil {
		t.Fatal(err)
	}
	d := NewDecoder()
	var match bool
	match, err = d.CompareStringToHash(randomString, hashedString)
	if err != nil {
		t.Fatal(err)
	}
	if !match {
		t.Log("passwords comparison failed")
		t.Log("passwords should match")
		t.Fail()
	}
	randomString, err = e.RandomString(32)
	if err != nil {
		t.Fatal(err)
	}
	match, err = d.CompareStringToHash(randomString, hashedString)
	if err != nil {
		t.Fatal(err)
	}
	if match {
		t.Log("passwords comparison failed")
		t.Log("passwords shouldn't match")
		t.Fail()
	}
}