package msg_net

import (
	"testing"
)

type tester struct {
	t   *testing.T
	msg *MsgFindRequest
}

func TestMsgNet(t *testing.T) {
	sf := &tester{
		t: t,
	}
	sf.create()
}

// Создание сообщения поиска
func (sf *tester) create() {
	sf.t.Log("create")
	sf.createBad1()
	sf.createGood1()
}

func (sf *tester) createGood1() {
	sf.t.Log("createGood1")
	msg, err := NewFindRequest("key")
	if err != nil {
		sf.t.Fatalf("createGood1(): err=\n\t%v", err)
	}
	if msg == nil {
		sf.t.Fatalf("createGood1(): msg==nil")
	}
	sf.msg = msg.(*MsgFindRequest)
	if val := sf.msg.Values(); len(val) != 0 {
		sf.t.Fatalf("createGood1(): len(val)=%d", len(val))
	}
	if key := sf.msg.Key(); key != "key" {
		sf.t.Fatalf("createGood1(): key=%q", key)
	}
	binData := sf.msg.Marshal()
	msg, err = UnmarshalFindRequest("key", binData)
	if err != nil {
		sf.t.Fatalf("createGood1(): err=\n\t%v", err)
	}
	if msg == nil {
		sf.t.Fatalf("createGood1(): msg==nil")
	}
	if key := msg.Key(); key != "key" {
		sf.t.Fatalf("createGood1(): key=%q", key)
	}
	_msg, err := UnmarshalFindRequest("key", []byte{})
	if err == nil {
		sf.t.Fatalf("createGood1(): err==nil")
	}
	if _msg != nil {
		sf.t.Fatalf("createGood1(): _msg!=nil")
	}
	_msg1, err := UnmarshalFindRequest("key", []byte(`{"key":"key_bad"}`))
	if err == nil {
		sf.t.Fatalf("createGood1(): err==nil")
	}
	if _msg1 != nil {
		sf.t.Fatalf("createGood1(): _msg1!=nil")
	}
}

// Нет ключа хранилища
func (sf *tester) createBad1() {
	sf.t.Log("createBad1")
	msg, err := NewFindRequest("")
	if err == nil {
		sf.t.Fatalf("createBad1(): err==nil")
	}
	if msg != nil {
		sf.t.Fatalf("createBad1(): msg!=nil")
	}
}
