////////////////////////////////////////////////////////////////////////////////
// Copyright © 2022 xx foundation                                             //
//                                                                            //
// Use of this source code is governed by a license that can be found in the  //
// LICENSE file                                                               //
////////////////////////////////////////////////////////////////////////////////

package channels

import (
	"bytes"
	"encoding/base64"
	"gitlab.com/elixxir/client/storage/versioned"
	cryptoChannel "gitlab.com/elixxir/crypto/channel"
	"gitlab.com/elixxir/ekv"
	"gitlab.com/xx_network/crypto/csprng"
	"testing"
)

func TestStoreLoadIdentity(t *testing.T) {
	rng := &csprng.SystemRNG{}
	privIdentity, err := cryptoChannel.GenerateIdentity(rng)
	if err != nil {
		t.Fatalf("GenerateIdentity error: %+v", err)
	}

	kv := versioned.NewKV(ekv.MakeMemstore())
	err = storeIdentity(kv, privIdentity)
	if err != nil {
		t.Fatalf("storeIdentity error: %+v", err)
	}

	loadedIdentity, err := loadIdentity(kv)
	if err != nil {
		t.Fatalf("loadIdentity error: %+v", err)
	}

	if !bytes.Equal(loadedIdentity.Marshal(), privIdentity.Marshal()) {
		t.Fatalf("Failed to load private identity."+
			"\nExpected: %s"+
			"\nReceived: %s",
			base64.StdEncoding.EncodeToString(privIdentity.Marshal()),
			base64.StdEncoding.EncodeToString(loadedIdentity.Marshal()))
	}

}