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 }