github.com/tsuna/gohbase@v0.0.0-20250731002811-4ffcadfba63e/debug_state_test.go (about)

     1  package gohbase
     2  
     3  import (
     4  	"encoding/json"
     5  	"log/slog"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"go.uber.org/mock/gomock"
    10  
    11  	"github.com/tsuna/gohbase/hrpc"
    12  	"github.com/tsuna/gohbase/region"
    13  )
    14  
    15  func TestDebugStateSanity(t *testing.T) {
    16  	client := newClient("~invalid.quorum~") // We shouldn't connect to ZK.
    17  
    18  	ctrl := gomock.NewController(t)
    19  	defer ctrl.Finish()
    20  
    21  	regClientAddr := "regionserver:1"
    22  	regClient := region.NewClient(
    23  		regClientAddr,
    24  		region.RegionClient,
    25  		defaultRPCQueueSize,
    26  		defaultFlushInterval,
    27  		defaultEffectiveUser,
    28  		region.DefaultReadTimeout,
    29  		client.compressionCodec,
    30  		nil,
    31  		slog.Default(),
    32  	)
    33  	newClientFn := func() hrpc.RegionClient {
    34  		return regClient
    35  	}
    36  
    37  	// Inject 3 entries in the cache.
    38  	region1 := region.NewInfo(
    39  		1,
    40  		nil,
    41  		[]byte("test"),
    42  		[]byte("test,,1234567890042.56f833d5569a27c7a43fbf547b4924a4."),
    43  		[]byte(""),
    44  		[]byte("foo"),
    45  	)
    46  	if os, replaced := client.regions.put(region1); !replaced {
    47  		t.Errorf("Expected to put new region into cache, got: %v", os)
    48  	} else if len(os) != 0 {
    49  		t.Errorf("Didn't expect any overlaps, got: %v", os)
    50  	}
    51  	region1.SetClient(regClient)
    52  	client.clients.put("regionserver:1", region1, newClientFn)
    53  
    54  	region2 := region.NewInfo(
    55  		2,
    56  		nil,
    57  		[]byte("test"),
    58  		[]byte("test,foo,1234567890042.56f833d5569a27c7a43fbf547b4924a4."),
    59  		[]byte("foo"),
    60  		[]byte("gohbase"),
    61  	)
    62  	if os, replaced := client.regions.put(region2); !replaced {
    63  		t.Errorf("Expected to put new region into cache, got: %v", os)
    64  	} else if len(os) != 0 {
    65  		t.Errorf("Didn't expect any overlaps, got: %v", os)
    66  	}
    67  	region2.SetClient(regClient)
    68  	client.clients.put("regionserver:1", region2, newClientFn)
    69  
    70  	region3 := region.NewInfo(
    71  		3,
    72  		nil,
    73  		[]byte("test"),
    74  		[]byte("test,gohbase,1234567890042.56f833d5569a27c7a43fbf547b4924a4."),
    75  		[]byte("gohbase"),
    76  		[]byte(""),
    77  	)
    78  	if os, replaced := client.regions.put(region3); !replaced {
    79  		t.Errorf("Expected to put new region into cache, got: %v", os)
    80  	} else if len(os) != 0 {
    81  		t.Errorf("Didn't expect any overlaps, got: %v", os)
    82  	}
    83  	region3.SetClient(regClient)
    84  	client.clients.put("regionserver:1", region3, newClientFn)
    85  
    86  	jsonVal, err := DebugState(client)
    87  
    88  	if err != nil {
    89  		t.Fatalf("DebugInfo should not have an error: %v", err)
    90  	}
    91  
    92  	var jsonUnMarshal map[string]interface{}
    93  	err = json.Unmarshal(jsonVal, &jsonUnMarshal)
    94  
    95  	if err != nil {
    96  		t.Fatalf("Encoutered eror when Unmarshalling: %v", err)
    97  	}
    98  
    99  	clientRegionMap := jsonUnMarshal["ClientRegionMap"]
   100  	clientType := jsonUnMarshal["ClientType"]
   101  	regionInfoMap := jsonUnMarshal["RegionInfoMap"]
   102  	keyRegionCache := jsonUnMarshal["KeyRegionCache"]
   103  	clientRegionCache := jsonUnMarshal["ClientRegionCache"]
   104  
   105  	expectedClientRegionSize := 1
   106  	regionInfoMapSize := 3
   107  
   108  	assert.Equal(t, clientType.(string), string(region.RegionClient))
   109  	assert.Equal(t, expectedClientRegionSize, len(clientRegionMap.(map[string]interface{})))
   110  	assert.Equal(t, regionInfoMapSize, len(regionInfoMap.(map[string]interface{})))
   111  	assert.Equal(t, 3, len(keyRegionCache.(map[string]interface{})))
   112  	assert.Equal(t, len(clientRegionCache.(map[string]interface{})), 1) // only have one client
   113  
   114  	assert.Equal(t, true, json.Valid(jsonVal))
   115  
   116  }