// AddTestTablet inserts a fake entry into FakeHealthCheck. // The Tablet can be talked to using the provided connection. func (fhc *FakeHealthCheck) AddTestTablet(cell, host string, port int32, keyspace, shard string, tabletType topodatapb.TabletType, serving bool, reparentTS int64, err error) *sandboxconn.SandboxConn { t := topo.NewTablet(0, cell, host) t.Keyspace = keyspace t.Shard = shard t.Type = tabletType t.PortMap["vt"] = port key := TabletToMapKey(t) fhc.mu.Lock() defer fhc.mu.Unlock() item := fhc.items[key] if item == nil { item = &fhcItem{ ts: &TabletStats{ Tablet: t, }, } fhc.items[key] = item } item.ts.Target = &querypb.Target{ Keyspace: keyspace, Shard: shard, TabletType: tabletType, } item.ts.Serving = serving item.ts.TabletExternallyReparentedTimestamp = reparentTS item.ts.Stats = &querypb.RealtimeStats{} item.ts.LastError = err conn := sandboxconn.NewSandboxConn(t) item.conn = conn return conn }
func sandboxDialer(tablet *topodatapb.Tablet, timeout time.Duration) (tabletconn.TabletConn, error) { sand := getSandbox(tablet.Keyspace) sand.sandmu.Lock() defer sand.sandmu.Unlock() sand.DialCounter++ if sand.DialMustFail > 0 { sand.DialMustFail-- return nil, tabletconn.OperationalError(fmt.Sprintf("conn error")) } if sand.DialMustTimeout > 0 { time.Sleep(timeout) sand.DialMustTimeout-- return nil, tabletconn.OperationalError(fmt.Sprintf("conn unreachable")) } sbc := sandboxconn.NewSandboxConn(tablet) return sbc, nil }