package storage

import (
	"testing"

	"github.com/gogo/protobuf/proto"
	"github.com/pingcap/kvproto/pkg/keyspacepb"
)

func TestGetKeyspaceMetaIncludesRuVersion(t *testing.T) {
	t.Parallel()

	raw, err := proto.Marshal(&keyspacepb.KeyspaceMeta{
		Id:             42,
		Name:           "test-keyspace",
		State:          keyspacepb.KeyspaceState_ENABLED,
		CreatedAt:      1710000000,
		StateChangedAt: 1710000300,
		Config: map[string]string{
			clusterIDTag:            "cluster-1",
			tenantIDTag:             "tenant-1",
			projectIDTag:            "project-1",
			tsoKeyspaceGroupTag:     "7",
			"meta_service_group_id": "meta-service-group-1",
			"min_rcu":               "100",
			"max_rcu":               "200",
			"ru_version":            "2",
		},
	})
	if err != nil {
		t.Fatalf("marshal keyspace meta: %v", err)
	}

	meta, err := getKeyspaceMeta(raw)
	if err != nil {
		t.Fatalf("getKeyspaceMeta returned error: %v", err)
	}

	if meta.KeyspaceID != "42" {
		t.Fatalf("unexpected KeyspaceID: %s", meta.KeyspaceID)
	}
	if meta.KeyspaceName != "test-keyspace" {
		t.Fatalf("unexpected KeyspaceName: %s", meta.KeyspaceName)
	}
	if meta.RuVersion != "2" {
		t.Fatalf("unexpected RuVersion: %s", meta.RuVersion)
	}
	if meta.MinRCU != 100 {
		t.Fatalf("unexpected MinRCU: %d", meta.MinRCU)
	}
	if meta.MaxRCU != 200 {
		t.Fatalf("unexpected MaxRCU: %d", meta.MaxRCU)
	}
	if meta.CreatedAt != 1710000000 {
		t.Fatalf("unexpected CreatedAt: %d", meta.CreatedAt)
	}
	if meta.StateChangedAt != 1710000300 {
		t.Fatalf("unexpected StateChangedAt: %d", meta.StateChangedAt)
	}
	if meta.Config["meta_service_group_id"] != "meta-service-group-1" {
		t.Fatalf("unexpected meta_service_group_id: %s", meta.Config["meta_service_group_id"])
	}
}
