From 319b3573e3aee8d161d3b12848d161140197d4ca Mon Sep 17 00:00:00 2001 From: ysf <1807100869@qq.com> Date: Fri, 2 Aug 2024 21:01:25 +0800 Subject: [PATCH 01/15] feat: add history ui and api --- console/atest-ui/src/App.vue | 7 + console/atest-ui/src/locales/en.json | 1 + console/atest-ui/src/locales/zh.json | 1 + console/atest-ui/src/views/TestCase.vue | 228 +- .../src/views/TestingHistoryPanel.vue | 362 ++++ console/atest-ui/src/views/net.ts | 22 + pkg/server/convert.go | 92 + pkg/server/remote_server.go | 64 + pkg/server/server.pb.go | 1876 +++++++++-------- pkg/server/server.pb.gw.go | 152 +- pkg/server/server.proto | 56 +- pkg/server/server.swagger.json | 182 +- pkg/server/server_grpc.pb.go | 78 + pkg/testing/case.go | 41 + pkg/testing/loader.go | 4 + pkg/testing/loader_file.go | 12 + pkg/testing/loader_non.go | 12 + pkg/testing/remote/converter.go | 125 +- pkg/testing/remote/grpc_store.go | 28 + pkg/testing/remote/loader.pb.go | 406 +--- pkg/testing/remote/loader.proto | 17 + pkg/testing/remote/loader_grpc.pb.go | 38 +- 22 files changed, 2530 insertions(+), 1274 deletions(-) create mode 100644 console/atest-ui/src/views/TestingHistoryPanel.vue diff --git a/console/atest-ui/src/App.vue b/console/atest-ui/src/App.vue index 1d3fc62dc..d2ba31228 100644 --- a/console/atest-ui/src/App.vue +++ b/console/atest-ui/src/App.vue @@ -2,6 +2,7 @@ import { Document, Menu as IconMenu, + Histogram, Location, Share, ArrowDown @@ -10,6 +11,7 @@ import { ref, watch } from 'vue' import { API } from './views/net' import { Cache } from './views/cache' import TestingPanel from './views/TestingPanel.vue' +import TestingHistoryPanel from './views/TestingHistoryPanel.vue' import MockManager from './views/MockManager.vue' import StoreManager from './views/StoreManager.vue' import SecretManager from './views/SecretManager.vue' @@ -104,6 +106,10 @@ const handleChangeLan = (command: string) => { + + + + @@ -135,6 +141,7 @@ const handleChangeLan = (command: string) => { + diff --git a/console/atest-ui/src/locales/en.json b/console/atest-ui/src/locales/en.json index 45d59f435..cddcf2b05 100644 --- a/console/atest-ui/src/locales/en.json +++ b/console/atest-ui/src/locales/en.json @@ -38,6 +38,7 @@ "apiRequestParameter": "API Request Parameter", "codeGenerator": "Code Generator", "testing": "Testing", + "history": "Testing History", "mock": "Mock", "welcome": "Welcome", "secrets": "Secrets", diff --git a/console/atest-ui/src/locales/zh.json b/console/atest-ui/src/locales/zh.json index 78f3ad62b..6d28095ab 100644 --- a/console/atest-ui/src/locales/zh.json +++ b/console/atest-ui/src/locales/zh.json @@ -33,6 +33,7 @@ "apiRequestParameter": "API 请求参数", "codeGenerator": "代码生成", "testing": "测试", + "history": "测试历史", "welcome": "欢迎", "secrets": "凭据", "stores": "存储", diff --git a/console/atest-ui/src/views/TestCase.vue b/console/atest-ui/src/views/TestCase.vue index 25015ecf6..c2b3503aa 100644 --- a/console/atest-ui/src/views/TestCase.vue +++ b/console/atest-ui/src/views/TestCase.vue @@ -21,6 +21,8 @@ const props = defineProps({ name: String, suite: String, kindName: String, + historySuiteName: String, + historyCaseID: String }) const emit = defineEmits(['updated']) @@ -52,31 +54,10 @@ const runTestCase = () => { API.RunTestCase({ suiteName: suite, name: name, - parameters: parameters.value + parameters: parameters.value }, (e) => { - testResult.value = e + handleTestResult(e) requestLoading.value = false - - if (e.error !== '') { - ElMessage({ - message: e.error, - type: 'error' - }) - } else { - ElMessage({ - message: 'Pass!', - type: 'success' - }) - } - parseResponseBody(e.body) - - Cache.SetTestCaseResponseCache(suite + '-' + name, { - body: testResult.value.bodyObject, - output: e.output, - statusCode: testResult.value.statusCode - } as TestCaseResponse) - - parameters.value = [] }, (e) => { parameters.value = [] @@ -100,6 +81,31 @@ const parseResponseBody = (body) => { } } +const handleTestResult = (e) => { + testResult.value = e; + + if (e.error !== '') { + ElMessage({ + message: e.error, + type: 'error' + }) + } else { + ElMessage({ + message: 'Pass!', + type: 'success' + }) + } + parseResponseBody(e.body) + + Cache.SetTestCaseResponseCache(suite + '-' + name, { + body: testResult.value.bodyObject, + output: e.output, + statusCode: testResult.value.statusCode + } as TestCaseResponse) + + parameters.value = [] +} + const responseBodyFilterText = ref('') function responseBodyFilter() { if (responseBodyFilterText.value === '') { @@ -117,8 +123,8 @@ function responseBodyFilter() { const parameterDialogOpened = ref(false) function openParameterDialog() { API.GetTestSuite(props.suite, (e) => { - parameters.value = e.param - parameterDialogOpened.value = true + parameters.value = e.param + parameterDialogOpened.value = true }, UIAPI.ErrorTip) } @@ -136,16 +142,16 @@ function generateCode() { name: name, generator: currentCodeGenerator.value }, (e) => { - ElMessage({ - message: 'Code generated!', - type: 'success' - }) - if (currentCodeGenerator.value === "gRPCPayload") { - currentCodeContent.value = JSON.stringify(JSON.parse(e.message), null, 4) - } else { - currentCodeContent.value = e.message - } - }, UIAPI.ErrorTip) + ElMessage({ + message: 'Code generated!', + type: 'success' + }) + if (currentCodeGenerator.value === "gRPCPayload") { + currentCodeContent.value = JSON.stringify(JSON.parse(e.message), null, 4) + } else { + currentCodeContent.value = e.message + } + }, UIAPI.ErrorTip) } function copyCode() { @@ -202,9 +208,17 @@ const emptyTestCaseWithSuite: TestCaseWithSuite = { const testCaseWithSuite = ref(emptyTestCaseWithSuite) +let name +let suite +let historySuiteName +let historyCaseID +const isHistoryTestCase = ref(false) + function load() { - const name = props.name - const suite = props.suite + name = props.name + suite = props.suite + historySuiteName = props.historySuiteName + historyCaseID = props.historyCaseID if (name === '' || suite === '') { return } @@ -222,61 +236,75 @@ function load() { } testResult.value.originBodyObject = testResult.value.bodyObject - API.GetTestCase({ - suiteName: suite, - name: name - }, (e) => { - if (e.request.method === '') { - e.request.method = 'GET' - } + if (historySuiteName != '' && historySuiteName != undefined) { + isHistoryTestCase.value = true + API.GetHistoryTestCase({ + historyCaseID : historyCaseID + }, (e) => { + processResponse(e.data) + handleTestResult(e.testCaseResult[0]) + }) + } else { + API.GetTestCase({ + suiteName: suite, + name: name + }, (e) => { + processResponse(e) + }) + } +} - e.request.header.push({ - key: '', - value: '' - }) - e.request.cookie.push({ - key: '', - value: '' - }) - e.request.query.push({ - key: '', - value: '' - }) - e.request.form.push({ - key: '', - value: '' - }) - e.response.header.push({ - key: '', - value: '' - }) - e.response.bodyFieldsExpect.push({ - key: '', - value: '' - }) - e.response.verify.push('') - if (e.response.statusCode === 0) { - e.response.statusCode = 200 +function processResponse(e) { + if (e.request.method === '') { + e.request.method = 'GET' + } + + e.request.header.push({ + key: '', + value: '' + }) + e.request.cookie.push({ + key: '', + value: '' + }) + e.request.query.push({ + key: '', + value: '' + }) + e.request.form.push({ + key: '', + value: '' + }) + e.response.header.push({ + key: '', + value: '' + }) + e.response.bodyFieldsExpect.push({ + key: '', + value: '' + }) + e.response.verify.push('') + if (e.response.statusCode === 0) { + e.response.statusCode = 200 + } + + e.request.header.forEach(item => { + if (item.key === "Content-Type") { + switch (item.value) { + case 'application/x-www-form-urlencoded': + bodyType.value = 4 + break + case 'application/json': + bodyType.value = 5 + break } + } + }); - e.request.header.forEach(item => { - if (item.key === "Content-Type") { - switch (item.value) { - case 'application/x-www-form-urlencoded': - bodyType.value = 4 - break - case 'application/json': - bodyType.value = 5 - break - } - } - }); - - testCaseWithSuite.value = { - suiteName: suite, - data: e - } as TestCaseWithSuite - }) + testCaseWithSuite.value = { + suiteName: suite, + data: e + } as TestCaseWithSuite } load() watch(props, () => { @@ -451,9 +479,9 @@ function bodyTypeChange(e: number) { if (contentType !== "") { testCaseWithSuite.value.data.request.header = insertOrUpdateIntoMap({ - key: 'Content-Type', - value: contentType - } as Pair, testCaseWithSuite.value.data.request.header) + key: 'Content-Type', + value: contentType + } as Pair, testCaseWithSuite.value.data.request.header) } } @@ -560,10 +588,10 @@ Magic.Keys(() => {
{{ t('button.save') }} {{ t('button.save') }} {{ t('button.delete') }} {{ t('button.duplicate') }} @@ -599,11 +627,11 @@ Magic.Keys(() => { {{ t('button.send') }} - +
@@ -682,7 +710,7 @@ Magic.Keys(() => { diff --git a/console/atest-ui/src/views/TestingHistoryPanel.vue b/console/atest-ui/src/views/TestingHistoryPanel.vue new file mode 100644 index 000000000..acb509707 --- /dev/null +++ b/console/atest-ui/src/views/TestingHistoryPanel.vue @@ -0,0 +1,362 @@ + + + + + diff --git a/console/atest-ui/src/views/net.ts b/console/atest-ui/src/views/net.ts index 788bacabd..8f1e09fca 100644 --- a/console/atest-ui/src/views/net.ts +++ b/console/atest-ui/src/views/net.ts @@ -185,6 +185,10 @@ interface TestCase { request: any } +interface HistoryTestCase { + historyCaseID : string +} + function CreateTestCase(testcase: TestCase, callback: (d: any) => void, errHandle?: (e: any) => void | null) { const requestOptions = { @@ -557,12 +561,30 @@ const GetTestSuiteYaml = (suite: string, callback: (d: any) => void, errHandle?: .catch(errHandle) } +function GetHistoryTestCase(req: HistoryTestCase, + callback: (d: any) => void, errHandle?: (e: any) => void | null) { + const requestOptions = { + method: 'POST', + headers: { + 'X-Store-Name': Cache.GetCurrentStore().name, + 'X-Auth': getToken() + }, + body: JSON.stringify({ + ID : req.historyCaseID + }) + } + fetch('/server.Runner/GetHistoryTestCase', requestOptions) + .then(DefaultResponseProcess) + .then(callback).catch(errHandle) +} + export const API = { DefaultResponseProcess, GetVersion, CreateTestSuite, UpdateTestSuite, ImportTestSuite, GetTestSuite, DeleteTestSuite, ConvertTestSuite, GetTestSuiteYaml, DuplicateTestSuite, CreateTestCase, UpdateTestCase, GetTestCase, ListTestCase, DeleteTestCase, RunTestCase, DuplicateTestCase, + GetHistoryTestCase, GenerateCode, ListCodeGenerator, PopularHeaders, CreateOrUpdateStore, GetStores, DeleteStore, VerifyStore, diff --git a/pkg/server/convert.go b/pkg/server/convert.go index e30bea48f..be1fd5ef5 100644 --- a/pkg/server/convert.go +++ b/pkg/server/convert.go @@ -18,6 +18,8 @@ package server import ( "strings" + "google.golang.org/protobuf/types/known/timestamppb" + "github.com/linuxsuren/api-testing/pkg/testing" "github.com/linuxsuren/api-testing/pkg/util" ) @@ -188,3 +190,93 @@ func ToNormalTestCase(in *TestCase) (result testing.TestCase) { } return } + +func ToNormalTestCaseResult(testCaseResult *TestCaseResult) (result testing.TestCaseResult) { + result = testing.TestCaseResult{ + StatusCode: int(testCaseResult.StatusCode), + Error: testCaseResult.Error, + Body: testCaseResult.Body, + Header: pairToMap(testCaseResult.Header), + Id: testCaseResult.Id, + Output: testCaseResult.Output, + } + return result +} + +func ToGRPCHistoryTestCaseResult(historyTestResult testing.HistoryTestResult) (result *HistoryTestResult) { + res := historyTestResult.Data.Data.Request + resp := historyTestResult.Data.Data.Expect + + result = &HistoryTestResult{ + Message: historyTestResult.Message, + Error: historyTestResult.Error, + CreateTime: timestamppb.New(historyTestResult.CreateTime), + + Data: &HistoryTestCase{ + HistorySuiteName: historyTestResult.Data.HistorySuiteName, + CaseName: historyTestResult.Data.CaseName, + CreateTime: timestamppb.New(historyTestResult.CreateTime), + SuiteName: historyTestResult.Data.SuiteName, + SuiteApi: historyTestResult.Data.SuiteAPI, + SuiteParam: mapToPair(historyTestResult.Data.SuiteParam), + + Request: &Request{ + Api: res.API, + Method: res.Method, + Body: res.Body.String(), + Header: mapToPair(res.Header), + Cookie: mapToPair(res.Cookie), + Query: mapInterToPair(res.Query), + Form: mapToPair(res.Form), + }, + + Response: &Response{ + StatusCode: int32(resp.StatusCode), + Body: resp.Body, + Schema: resp.Schema, + Verify: resp.Verify, + BodyFieldsExpect: mapInterToPair(resp.BodyFieldsExpect), + Header: mapToPair(resp.Header), + }, + }, + } + + result.Data.SuiteSpec = ToGRPCTestSuiteSpec(historyTestResult.Data.SuiteSpec) + + for _, testCaseResult := range historyTestResult.TestCaseResult { + result.TestCaseResult = append(result.TestCaseResult, &TestCaseResult{ + StatusCode: int32(testCaseResult.StatusCode), + Error: testCaseResult.Error, + Body: testCaseResult.Body, + Header: mapToPair(testCaseResult.Header), + Output: testCaseResult.Output, + Id: testCaseResult.Id, + }) + } + return +} + +func ToGRPCTestSuiteSpec(spec testing.APISpec) (result *APISpec) { + result = &APISpec{ + Kind: spec.Kind, + Url: spec.URL, + } + if spec.RPC != nil { + result.Rpc = &RPC{ + Raw: spec.RPC.Raw, + Protofile: spec.RPC.ProtoFile, + Import: spec.RPC.ImportPath, + ServerReflection: spec.RPC.ServerReflection, + } + } + if spec.Secure != nil { + result.Secure = &Secure{ + Insecure: spec.Secure.Insecure, + Cert: spec.Secure.CertFile, + Ca: spec.Secure.CAFile, + ServerName: spec.Secure.ServerName, + Key: spec.Secure.KeyFile, + } + } + return +} diff --git a/pkg/server/remote_server.go b/pkg/server/remote_server.go index b3ed45d5c..b06b44bb2 100644 --- a/pkg/server/remote_server.go +++ b/pkg/server/remote_server.go @@ -349,6 +349,33 @@ func (s *server) GetSuites(ctx context.Context, in *Empty) (reply *Suites, err e return } +func (s *server) GetHistorySuites(ctx context.Context, in *Empty) (reply *HistorySuites, err error) { + loader := s.getLoader(ctx) + defer loader.Close() + reply = &HistorySuites{ + Data: make(map[string]*HistoryItems), + } + + var suites []testing.HistoryTestSuite + if suites, err = loader.ListHistoryTestSuite(); err == nil && suites != nil { + for _, suite := range suites { + items := &HistoryItems{} + for _, item := range suite.Items { + data := &HistoryCaseIdentity{ + ID: item.ID, + HistorySuiteName: item.HistorySuiteName, + Kind: item.SuiteSpec.Kind, + Suite: item.SuiteName, + Testcase: item.CaseName, + } + items.Data = append(items.Data, data) + } + reply.Data[suite.HistorySuiteName] = items + } + } + return +} + func (s *server) CreateTestSuite(ctx context.Context, in *TestSuiteIdentity) (reply *HelloReply, err error) { reply = &HelloReply{} loader := s.getLoader(ctx) @@ -501,6 +528,16 @@ func (s *server) GetTestCase(ctx context.Context, in *TestCaseIdentity) (reply * return } +func (s *server) GetHistoryTestCase(ctx context.Context, in *HistoryTestCase) (reply *HistoryTestResult, err error) { + var result testing.HistoryTestResult + loader := s.getLoader(ctx) + defer loader.Close() + if result, err = loader.GetHistoryTestCase(in.ID); err == nil { + reply = ToGRPCHistoryTestCaseResult(result) + } + return +} + var ExecutionCountNum = promauto.NewCounter(prometheus.CounterOpts{ Name: "atest_execution_count", Help: "The total number of request execution", @@ -562,8 +599,21 @@ func (s *server) RunTestCase(ctx context.Context, in *TestCaseIdentity) (result } return } + + result = &TestCaseResult{ + Output: reply.Message, + Error: reply.Error, + Body: lastItem.Body, + Header: lastItem.Header, + StatusCode: lastItem.StatusCode, + } } else if err != nil { result.Error = err.Error() + } else { + result = &TestCaseResult{ + Output: reply.Message, + Error: reply.Error, + } } if reply != nil { @@ -575,6 +625,20 @@ func (s *server) RunTestCase(ctx context.Context, in *TestCaseIdentity) (result result.Header = lastItem.Header result.StatusCode = lastItem.StatusCode } + + normalResult := ToNormalTestCaseResult(result) + var testSuite *testing.TestSuite + if testSuite, err = s.getSuiteFromTestTask(task); err != nil { + result = &TestCaseResult{ + Error: err.Error(), + } + } + err = loader.CreateHistoryTestCase(normalResult, testSuite) + if err != nil { + result = &TestCaseResult{ + Error: err.Error(), + } + } } return } diff --git a/pkg/server/server.pb.go b/pkg/server/server.pb.go index b2a4759cb..a77b74880 100644 --- a/pkg/server/server.pb.go +++ b/pkg/server/server.pb.go @@ -10,6 +10,7 @@ import ( _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -123,6 +124,179 @@ func (x *Items) GetKind() string { return "" } +type HistorySuites struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data map[string]*HistoryItems `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *HistorySuites) Reset() { + *x = HistorySuites{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_server_server_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HistorySuites) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HistorySuites) ProtoMessage() {} + +func (x *HistorySuites) ProtoReflect() protoreflect.Message { + mi := &file_pkg_server_server_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HistorySuites.ProtoReflect.Descriptor instead. +func (*HistorySuites) Descriptor() ([]byte, []int) { + return file_pkg_server_server_proto_rawDescGZIP(), []int{2} +} + +func (x *HistorySuites) GetData() map[string]*HistoryItems { + if x != nil { + return x.Data + } + return nil +} + +type HistoryItems struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data []*HistoryCaseIdentity `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` +} + +func (x *HistoryItems) Reset() { + *x = HistoryItems{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_server_server_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HistoryItems) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HistoryItems) ProtoMessage() {} + +func (x *HistoryItems) ProtoReflect() protoreflect.Message { + mi := &file_pkg_server_server_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HistoryItems.ProtoReflect.Descriptor instead. +func (*HistoryItems) Descriptor() ([]byte, []int) { + return file_pkg_server_server_proto_rawDescGZIP(), []int{3} +} + +func (x *HistoryItems) GetData() []*HistoryCaseIdentity { + if x != nil { + return x.Data + } + return nil +} + +type HistoryCaseIdentity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Suite string `protobuf:"bytes,1,opt,name=suite,proto3" json:"suite,omitempty"` + Testcase string `protobuf:"bytes,2,opt,name=testcase,proto3" json:"testcase,omitempty"` + HistorySuiteName string `protobuf:"bytes,3,opt,name=historySuiteName,proto3" json:"historySuiteName,omitempty"` + Kind string `protobuf:"bytes,4,opt,name=kind,proto3" json:"kind,omitempty"` + ID string `protobuf:"bytes,5,opt,name=ID,proto3" json:"ID,omitempty"` +} + +func (x *HistoryCaseIdentity) Reset() { + *x = HistoryCaseIdentity{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_server_server_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HistoryCaseIdentity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HistoryCaseIdentity) ProtoMessage() {} + +func (x *HistoryCaseIdentity) ProtoReflect() protoreflect.Message { + mi := &file_pkg_server_server_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HistoryCaseIdentity.ProtoReflect.Descriptor instead. +func (*HistoryCaseIdentity) Descriptor() ([]byte, []int) { + return file_pkg_server_server_proto_rawDescGZIP(), []int{4} +} + +func (x *HistoryCaseIdentity) GetSuite() string { + if x != nil { + return x.Suite + } + return "" +} + +func (x *HistoryCaseIdentity) GetTestcase() string { + if x != nil { + return x.Testcase + } + return "" +} + +func (x *HistoryCaseIdentity) GetHistorySuiteName() string { + if x != nil { + return x.HistorySuiteName + } + return "" +} + +func (x *HistoryCaseIdentity) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *HistoryCaseIdentity) GetID() string { + if x != nil { + return x.ID + } + return "" +} + type TestCaseIdentity struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -136,7 +310,7 @@ type TestCaseIdentity struct { func (x *TestCaseIdentity) Reset() { *x = TestCaseIdentity{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[2] + mi := &file_pkg_server_server_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -149,7 +323,7 @@ func (x *TestCaseIdentity) String() string { func (*TestCaseIdentity) ProtoMessage() {} func (x *TestCaseIdentity) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[2] + mi := &file_pkg_server_server_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -162,7 +336,7 @@ func (x *TestCaseIdentity) ProtoReflect() protoreflect.Message { // Deprecated: Use TestCaseIdentity.ProtoReflect.Descriptor instead. func (*TestCaseIdentity) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{2} + return file_pkg_server_server_proto_rawDescGZIP(), []int{5} } func (x *TestCaseIdentity) GetSuite() string { @@ -199,7 +373,7 @@ type TestSuiteSource struct { func (x *TestSuiteSource) Reset() { *x = TestSuiteSource{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[3] + mi := &file_pkg_server_server_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -212,7 +386,7 @@ func (x *TestSuiteSource) String() string { func (*TestSuiteSource) ProtoMessage() {} func (x *TestSuiteSource) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[3] + mi := &file_pkg_server_server_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -225,7 +399,7 @@ func (x *TestSuiteSource) ProtoReflect() protoreflect.Message { // Deprecated: Use TestSuiteSource.ProtoReflect.Descriptor instead. func (*TestSuiteSource) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{3} + return file_pkg_server_server_proto_rawDescGZIP(), []int{6} } func (x *TestSuiteSource) GetKind() string { @@ -263,7 +437,7 @@ type TestSuite struct { func (x *TestSuite) Reset() { *x = TestSuite{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[4] + mi := &file_pkg_server_server_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -276,7 +450,7 @@ func (x *TestSuite) String() string { func (*TestSuite) ProtoMessage() {} func (x *TestSuite) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[4] + mi := &file_pkg_server_server_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -289,7 +463,7 @@ func (x *TestSuite) ProtoReflect() protoreflect.Message { // Deprecated: Use TestSuite.ProtoReflect.Descriptor instead. func (*TestSuite) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{4} + return file_pkg_server_server_proto_rawDescGZIP(), []int{7} } func (x *TestSuite) GetName() string { @@ -332,7 +506,7 @@ type TestSuiteWithCase struct { func (x *TestSuiteWithCase) Reset() { *x = TestSuiteWithCase{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[5] + mi := &file_pkg_server_server_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -345,7 +519,7 @@ func (x *TestSuiteWithCase) String() string { func (*TestSuiteWithCase) ProtoMessage() {} func (x *TestSuiteWithCase) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[5] + mi := &file_pkg_server_server_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -358,7 +532,7 @@ func (x *TestSuiteWithCase) ProtoReflect() protoreflect.Message { // Deprecated: Use TestSuiteWithCase.ProtoReflect.Descriptor instead. func (*TestSuiteWithCase) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{5} + return file_pkg_server_server_proto_rawDescGZIP(), []int{8} } func (x *TestSuiteWithCase) GetSuite() *TestSuite { @@ -389,7 +563,7 @@ type APISpec struct { func (x *APISpec) Reset() { *x = APISpec{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[6] + mi := &file_pkg_server_server_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -402,7 +576,7 @@ func (x *APISpec) String() string { func (*APISpec) ProtoMessage() {} func (x *APISpec) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[6] + mi := &file_pkg_server_server_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -415,7 +589,7 @@ func (x *APISpec) ProtoReflect() protoreflect.Message { // Deprecated: Use APISpec.ProtoReflect.Descriptor instead. func (*APISpec) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{6} + return file_pkg_server_server_proto_rawDescGZIP(), []int{9} } func (x *APISpec) GetKind() string { @@ -461,7 +635,7 @@ type Secure struct { func (x *Secure) Reset() { *x = Secure{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[7] + mi := &file_pkg_server_server_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -474,7 +648,7 @@ func (x *Secure) String() string { func (*Secure) ProtoMessage() {} func (x *Secure) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[7] + mi := &file_pkg_server_server_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -487,7 +661,7 @@ func (x *Secure) ProtoReflect() protoreflect.Message { // Deprecated: Use Secure.ProtoReflect.Descriptor instead. func (*Secure) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{7} + return file_pkg_server_server_proto_rawDescGZIP(), []int{10} } func (x *Secure) GetInsecure() bool { @@ -540,7 +714,7 @@ type RPC struct { func (x *RPC) Reset() { *x = RPC{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[8] + mi := &file_pkg_server_server_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -553,7 +727,7 @@ func (x *RPC) String() string { func (*RPC) ProtoMessage() {} func (x *RPC) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[8] + mi := &file_pkg_server_server_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -566,7 +740,7 @@ func (x *RPC) ProtoReflect() protoreflect.Message { // Deprecated: Use RPC.ProtoReflect.Descriptor instead. func (*RPC) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{8} + return file_pkg_server_server_proto_rawDescGZIP(), []int{11} } func (x *RPC) GetImport() []string { @@ -617,7 +791,7 @@ type TestSuiteIdentity struct { func (x *TestSuiteIdentity) Reset() { *x = TestSuiteIdentity{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[9] + mi := &file_pkg_server_server_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -630,7 +804,7 @@ func (x *TestSuiteIdentity) String() string { func (*TestSuiteIdentity) ProtoMessage() {} func (x *TestSuiteIdentity) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[9] + mi := &file_pkg_server_server_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -643,7 +817,7 @@ func (x *TestSuiteIdentity) ProtoReflect() protoreflect.Message { // Deprecated: Use TestSuiteIdentity.ProtoReflect.Descriptor instead. func (*TestSuiteIdentity) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{9} + return file_pkg_server_server_proto_rawDescGZIP(), []int{12} } func (x *TestSuiteIdentity) GetName() string { @@ -809,7 +983,7 @@ type TestTask struct { func (x *TestTask) Reset() { *x = TestTask{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[12] + mi := &file_pkg_server_server_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -822,7 +996,7 @@ func (x *TestTask) String() string { func (*TestTask) ProtoMessage() {} func (x *TestTask) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[12] + mi := &file_pkg_server_server_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -835,7 +1009,7 @@ func (x *TestTask) ProtoReflect() protoreflect.Message { // Deprecated: Use TestTask.ProtoReflect.Descriptor instead. func (*TestTask) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{12} + return file_pkg_server_server_proto_rawDescGZIP(), []int{10} } func (x *TestTask) GetData() string { @@ -893,7 +1067,7 @@ type TestResult struct { func (x *TestResult) Reset() { *x = TestResult{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[13] + mi := &file_pkg_server_server_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -906,7 +1080,7 @@ func (x *TestResult) String() string { func (*TestResult) ProtoMessage() {} func (x *TestResult) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[13] + mi := &file_pkg_server_server_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -919,7 +1093,7 @@ func (x *TestResult) ProtoReflect() protoreflect.Message { // Deprecated: Use TestResult.ProtoReflect.Descriptor instead. func (*TestResult) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{13} + return file_pkg_server_server_proto_rawDescGZIP(), []int{11} } func (x *TestResult) GetMessage() string { @@ -943,6 +1117,85 @@ func (x *TestResult) GetTestCaseResult() []*TestCaseResult { return nil } +type HistoryTestResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` + TestCaseResult []*TestCaseResult `protobuf:"bytes,3,rep,name=testCaseResult,proto3" json:"testCaseResult,omitempty"` + Data *HistoryTestCase `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` + CreateTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=createTime,proto3" json:"createTime,omitempty"` +} + +func (x *HistoryTestResult) Reset() { + *x = HistoryTestResult{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_server_server_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HistoryTestResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HistoryTestResult) ProtoMessage() {} + +func (x *HistoryTestResult) ProtoReflect() protoreflect.Message { + mi := &file_pkg_server_server_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HistoryTestResult.ProtoReflect.Descriptor instead. +func (*HistoryTestResult) Descriptor() ([]byte, []int) { + return file_pkg_server_server_proto_rawDescGZIP(), []int{15} +} + +func (x *HistoryTestResult) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *HistoryTestResult) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +func (x *HistoryTestResult) GetTestCaseResult() []*TestCaseResult { + if x != nil { + return x.TestCaseResult + } + return nil +} + +func (x *HistoryTestResult) GetData() *HistoryTestCase { + if x != nil { + return x.Data + } + return nil +} + +func (x *HistoryTestResult) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + type HelloReply struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -955,7 +1208,7 @@ type HelloReply struct { func (x *HelloReply) Reset() { *x = HelloReply{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[14] + mi := &file_pkg_server_server_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -968,7 +1221,7 @@ func (x *HelloReply) String() string { func (*HelloReply) ProtoMessage() {} func (x *HelloReply) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[14] + mi := &file_pkg_server_server_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -981,7 +1234,7 @@ func (x *HelloReply) ProtoReflect() protoreflect.Message { // Deprecated: Use HelloReply.ProtoReflect.Descriptor instead. func (*HelloReply) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{14} + return file_pkg_server_server_proto_rawDescGZIP(), []int{12} } func (x *HelloReply) GetMessage() string { @@ -1009,7 +1262,7 @@ type YamlData struct { func (x *YamlData) Reset() { *x = YamlData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[15] + mi := &file_pkg_server_server_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1022,7 +1275,7 @@ func (x *YamlData) String() string { func (*YamlData) ProtoMessage() {} func (x *YamlData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[15] + mi := &file_pkg_server_server_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1035,7 +1288,7 @@ func (x *YamlData) ProtoReflect() protoreflect.Message { // Deprecated: Use YamlData.ProtoReflect.Descriptor instead. func (*YamlData) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{15} + return file_pkg_server_server_proto_rawDescGZIP(), []int{13} } func (x *YamlData) GetData() []byte { @@ -1058,7 +1311,7 @@ type Suite struct { func (x *Suite) Reset() { *x = Suite{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[16] + mi := &file_pkg_server_server_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1071,7 +1324,7 @@ func (x *Suite) String() string { func (*Suite) ProtoMessage() {} func (x *Suite) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[16] + mi := &file_pkg_server_server_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1084,7 +1337,7 @@ func (x *Suite) ProtoReflect() protoreflect.Message { // Deprecated: Use Suite.ProtoReflect.Descriptor instead. func (*Suite) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{16} + return file_pkg_server_server_proto_rawDescGZIP(), []int{14} } func (x *Suite) GetName() string { @@ -1120,7 +1373,7 @@ type TestCaseWithSuite struct { func (x *TestCaseWithSuite) Reset() { *x = TestCaseWithSuite{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[17] + mi := &file_pkg_server_server_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1133,7 +1386,7 @@ func (x *TestCaseWithSuite) String() string { func (*TestCaseWithSuite) ProtoMessage() {} func (x *TestCaseWithSuite) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[17] + mi := &file_pkg_server_server_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1146,7 +1399,7 @@ func (x *TestCaseWithSuite) ProtoReflect() protoreflect.Message { // Deprecated: Use TestCaseWithSuite.ProtoReflect.Descriptor instead. func (*TestCaseWithSuite) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{17} + return file_pkg_server_server_proto_rawDescGZIP(), []int{15} } func (x *TestCaseWithSuite) GetSuiteName() string { @@ -1174,7 +1427,7 @@ type TestCases struct { func (x *TestCases) Reset() { *x = TestCases{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[18] + mi := &file_pkg_server_server_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1187,7 +1440,7 @@ func (x *TestCases) String() string { func (*TestCases) ProtoMessage() {} func (x *TestCases) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[18] + mi := &file_pkg_server_server_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1200,7 +1453,7 @@ func (x *TestCases) ProtoReflect() protoreflect.Message { // Deprecated: Use TestCases.ProtoReflect.Descriptor instead. func (*TestCases) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{18} + return file_pkg_server_server_proto_rawDescGZIP(), []int{16} } func (x *TestCases) GetData() []*TestCase { @@ -1224,7 +1477,7 @@ type TestCase struct { func (x *TestCase) Reset() { *x = TestCase{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[19] + mi := &file_pkg_server_server_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1237,7 +1490,7 @@ func (x *TestCase) String() string { func (*TestCase) ProtoMessage() {} func (x *TestCase) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[19] + mi := &file_pkg_server_server_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1250,37 +1503,156 @@ func (x *TestCase) ProtoReflect() protoreflect.Message { // Deprecated: Use TestCase.ProtoReflect.Descriptor instead. func (*TestCase) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{19} + return file_pkg_server_server_proto_rawDescGZIP(), []int{17} +} + +func (x *TestCase) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TestCase) GetSuiteName() string { + if x != nil { + return x.SuiteName + } + return "" +} + +func (x *TestCase) GetRequest() *Request { + if x != nil { + return x.Request + } + return nil +} + +func (x *TestCase) GetResponse() *Response { + if x != nil { + return x.Response + } + return nil +} + +type HistoryTestCase struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CaseName string `protobuf:"bytes,1,opt,name=caseName,proto3" json:"caseName,omitempty"` + SuiteName string `protobuf:"bytes,2,opt,name=suiteName,proto3" json:"suiteName,omitempty"` + HistorySuiteName string `protobuf:"bytes,3,opt,name=historySuiteName,proto3" json:"historySuiteName,omitempty"` + CreateTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=createTime,proto3" json:"createTime,omitempty"` + SuiteParam []*Pair `protobuf:"bytes,5,rep,name=suiteParam,proto3" json:"suiteParam,omitempty"` + SuiteSpec *APISpec `protobuf:"bytes,6,opt,name=suiteSpec,proto3" json:"suiteSpec,omitempty"` + SuiteApi string `protobuf:"bytes,7,opt,name=suiteApi,proto3" json:"suiteApi,omitempty"` + Request *Request `protobuf:"bytes,8,opt,name=request,proto3" json:"request,omitempty"` + Response *Response `protobuf:"bytes,9,opt,name=response,proto3" json:"response,omitempty"` + ID string `protobuf:"bytes,10,opt,name=ID,proto3" json:"ID,omitempty"` +} + +func (x *HistoryTestCase) Reset() { + *x = HistoryTestCase{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_server_server_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HistoryTestCase) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HistoryTestCase) ProtoMessage() {} + +func (x *HistoryTestCase) ProtoReflect() protoreflect.Message { + mi := &file_pkg_server_server_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HistoryTestCase.ProtoReflect.Descriptor instead. +func (*HistoryTestCase) Descriptor() ([]byte, []int) { + return file_pkg_server_server_proto_rawDescGZIP(), []int{22} +} + +func (x *HistoryTestCase) GetCaseName() string { + if x != nil { + return x.CaseName + } + return "" +} + +func (x *HistoryTestCase) GetSuiteName() string { + if x != nil { + return x.SuiteName + } + return "" +} + +func (x *HistoryTestCase) GetHistorySuiteName() string { + if x != nil { + return x.HistorySuiteName + } + return "" +} + +func (x *HistoryTestCase) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *HistoryTestCase) GetSuiteParam() []*Pair { + if x != nil { + return x.SuiteParam + } + return nil } -func (x *TestCase) GetName() string { +func (x *HistoryTestCase) GetSuiteSpec() *APISpec { if x != nil { - return x.Name + return x.SuiteSpec } - return "" + return nil } -func (x *TestCase) GetSuiteName() string { +func (x *HistoryTestCase) GetSuiteApi() string { if x != nil { - return x.SuiteName + return x.SuiteApi } return "" } -func (x *TestCase) GetRequest() *Request { +func (x *HistoryTestCase) GetRequest() *Request { if x != nil { return x.Request } return nil } -func (x *TestCase) GetResponse() *Response { +func (x *HistoryTestCase) GetResponse() *Response { if x != nil { return x.Response } return nil } +func (x *HistoryTestCase) GetID() string { + if x != nil { + return x.ID + } + return "" +} + type Request struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1298,7 +1670,7 @@ type Request struct { func (x *Request) Reset() { *x = Request{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[20] + mi := &file_pkg_server_server_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1311,7 +1683,7 @@ func (x *Request) String() string { func (*Request) ProtoMessage() {} func (x *Request) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[20] + mi := &file_pkg_server_server_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1324,7 +1696,7 @@ func (x *Request) ProtoReflect() protoreflect.Message { // Deprecated: Use Request.ProtoReflect.Descriptor instead. func (*Request) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{20} + return file_pkg_server_server_proto_rawDescGZIP(), []int{18} } func (x *Request) GetApi() string { @@ -1393,7 +1765,7 @@ type Response struct { func (x *Response) Reset() { *x = Response{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[21] + mi := &file_pkg_server_server_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1406,7 +1778,7 @@ func (x *Response) String() string { func (*Response) ProtoMessage() {} func (x *Response) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[21] + mi := &file_pkg_server_server_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1419,7 +1791,7 @@ func (x *Response) ProtoReflect() protoreflect.Message { // Deprecated: Use Response.ProtoReflect.Descriptor instead. func (*Response) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{21} + return file_pkg_server_server_proto_rawDescGZIP(), []int{19} } func (x *Response) GetStatusCode() int32 { @@ -1483,7 +1855,7 @@ type ConditionalVerify struct { func (x *ConditionalVerify) Reset() { *x = ConditionalVerify{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[22] + mi := &file_pkg_server_server_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1496,7 +1868,7 @@ func (x *ConditionalVerify) String() string { func (*ConditionalVerify) ProtoMessage() {} func (x *ConditionalVerify) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[22] + mi := &file_pkg_server_server_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1509,7 +1881,7 @@ func (x *ConditionalVerify) ProtoReflect() protoreflect.Message { // Deprecated: Use ConditionalVerify.ProtoReflect.Descriptor instead. func (*ConditionalVerify) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{22} + return file_pkg_server_server_proto_rawDescGZIP(), []int{20} } func (x *ConditionalVerify) GetCondition() []string { @@ -1542,7 +1914,7 @@ type TestCaseResult struct { func (x *TestCaseResult) Reset() { *x = TestCaseResult{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[23] + mi := &file_pkg_server_server_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1555,7 +1927,7 @@ func (x *TestCaseResult) String() string { func (*TestCaseResult) ProtoMessage() {} func (x *TestCaseResult) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[23] + mi := &file_pkg_server_server_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1568,7 +1940,7 @@ func (x *TestCaseResult) ProtoReflect() protoreflect.Message { // Deprecated: Use TestCaseResult.ProtoReflect.Descriptor instead. func (*TestCaseResult) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{23} + return file_pkg_server_server_proto_rawDescGZIP(), []int{21} } func (x *TestCaseResult) GetStatusCode() int32 { @@ -1625,7 +1997,7 @@ type Pair struct { func (x *Pair) Reset() { *x = Pair{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[24] + mi := &file_pkg_server_server_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1638,7 +2010,7 @@ func (x *Pair) String() string { func (*Pair) ProtoMessage() {} func (x *Pair) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[24] + mi := &file_pkg_server_server_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1651,7 +2023,7 @@ func (x *Pair) ProtoReflect() protoreflect.Message { // Deprecated: Use Pair.ProtoReflect.Descriptor instead. func (*Pair) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{24} + return file_pkg_server_server_proto_rawDescGZIP(), []int{22} } func (x *Pair) GetKey() string { @@ -1679,7 +2051,7 @@ type Pairs struct { func (x *Pairs) Reset() { *x = Pairs{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[25] + mi := &file_pkg_server_server_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1692,7 +2064,7 @@ func (x *Pairs) String() string { func (*Pairs) ProtoMessage() {} func (x *Pairs) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[25] + mi := &file_pkg_server_server_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1705,7 +2077,7 @@ func (x *Pairs) ProtoReflect() protoreflect.Message { // Deprecated: Use Pairs.ProtoReflect.Descriptor instead. func (*Pairs) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{25} + return file_pkg_server_server_proto_rawDescGZIP(), []int{23} } func (x *Pairs) GetData() []*Pair { @@ -1726,7 +2098,7 @@ type SimpleQuery struct { func (x *SimpleQuery) Reset() { *x = SimpleQuery{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[26] + mi := &file_pkg_server_server_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1739,7 +2111,7 @@ func (x *SimpleQuery) String() string { func (*SimpleQuery) ProtoMessage() {} func (x *SimpleQuery) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[26] + mi := &file_pkg_server_server_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1752,7 +2124,7 @@ func (x *SimpleQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use SimpleQuery.ProtoReflect.Descriptor instead. func (*SimpleQuery) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{26} + return file_pkg_server_server_proto_rawDescGZIP(), []int{24} } func (x *SimpleQuery) GetName() string { @@ -1773,7 +2145,7 @@ type Stores struct { func (x *Stores) Reset() { *x = Stores{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[27] + mi := &file_pkg_server_server_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1786,7 +2158,7 @@ func (x *Stores) String() string { func (*Stores) ProtoMessage() {} func (x *Stores) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[27] + mi := &file_pkg_server_server_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1799,7 +2171,7 @@ func (x *Stores) ProtoReflect() protoreflect.Message { // Deprecated: Use Stores.ProtoReflect.Descriptor instead. func (*Stores) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{27} + return file_pkg_server_server_proto_rawDescGZIP(), []int{25} } func (x *Stores) GetData() []*Store { @@ -1830,7 +2202,7 @@ type Store struct { func (x *Store) Reset() { *x = Store{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[28] + mi := &file_pkg_server_server_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1843,7 +2215,7 @@ func (x *Store) String() string { func (*Store) ProtoMessage() {} func (x *Store) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[28] + mi := &file_pkg_server_server_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1856,7 +2228,7 @@ func (x *Store) ProtoReflect() protoreflect.Message { // Deprecated: Use Store.ProtoReflect.Descriptor instead. func (*Store) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{28} + return file_pkg_server_server_proto_rawDescGZIP(), []int{26} } func (x *Store) GetName() string { @@ -1947,7 +2319,7 @@ type StoreKinds struct { func (x *StoreKinds) Reset() { *x = StoreKinds{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[29] + mi := &file_pkg_server_server_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1960,7 +2332,7 @@ func (x *StoreKinds) String() string { func (*StoreKinds) ProtoMessage() {} func (x *StoreKinds) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[29] + mi := &file_pkg_server_server_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1973,7 +2345,7 @@ func (x *StoreKinds) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreKinds.ProtoReflect.Descriptor instead. func (*StoreKinds) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{29} + return file_pkg_server_server_proto_rawDescGZIP(), []int{27} } func (x *StoreKinds) GetData() []*StoreKind { @@ -1996,7 +2368,7 @@ type StoreKind struct { func (x *StoreKind) Reset() { *x = StoreKind{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[30] + mi := &file_pkg_server_server_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2009,7 +2381,7 @@ func (x *StoreKind) String() string { func (*StoreKind) ProtoMessage() {} func (x *StoreKind) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[30] + mi := &file_pkg_server_server_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2022,7 +2394,7 @@ func (x *StoreKind) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreKind.ProtoReflect.Descriptor instead. func (*StoreKind) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{30} + return file_pkg_server_server_proto_rawDescGZIP(), []int{28} } func (x *StoreKind) GetName() string { @@ -2058,7 +2430,7 @@ type CommonResult struct { func (x *CommonResult) Reset() { *x = CommonResult{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[31] + mi := &file_pkg_server_server_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2071,7 +2443,7 @@ func (x *CommonResult) String() string { func (*CommonResult) ProtoMessage() {} func (x *CommonResult) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[31] + mi := &file_pkg_server_server_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2084,7 +2456,7 @@ func (x *CommonResult) ProtoReflect() protoreflect.Message { // Deprecated: Use CommonResult.ProtoReflect.Descriptor instead. func (*CommonResult) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{31} + return file_pkg_server_server_proto_rawDescGZIP(), []int{29} } func (x *CommonResult) GetSuccess() bool { @@ -2112,7 +2484,7 @@ type SimpleList struct { func (x *SimpleList) Reset() { *x = SimpleList{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[32] + mi := &file_pkg_server_server_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2125,7 +2497,7 @@ func (x *SimpleList) String() string { func (*SimpleList) ProtoMessage() {} func (x *SimpleList) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[32] + mi := &file_pkg_server_server_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2138,7 +2510,7 @@ func (x *SimpleList) ProtoReflect() protoreflect.Message { // Deprecated: Use SimpleList.ProtoReflect.Descriptor instead. func (*SimpleList) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{32} + return file_pkg_server_server_proto_rawDescGZIP(), []int{30} } func (x *SimpleList) GetData() []*Pair { @@ -2159,7 +2531,7 @@ type SimpleName struct { func (x *SimpleName) Reset() { *x = SimpleName{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[33] + mi := &file_pkg_server_server_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2172,7 +2544,7 @@ func (x *SimpleName) String() string { func (*SimpleName) ProtoMessage() {} func (x *SimpleName) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[33] + mi := &file_pkg_server_server_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2185,7 +2557,7 @@ func (x *SimpleName) ProtoReflect() protoreflect.Message { // Deprecated: Use SimpleName.ProtoReflect.Descriptor instead. func (*SimpleName) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{33} + return file_pkg_server_server_proto_rawDescGZIP(), []int{31} } func (x *SimpleName) GetName() string { @@ -2208,7 +2580,7 @@ type CodeGenerateRequest struct { func (x *CodeGenerateRequest) Reset() { *x = CodeGenerateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[34] + mi := &file_pkg_server_server_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2221,7 +2593,7 @@ func (x *CodeGenerateRequest) String() string { func (*CodeGenerateRequest) ProtoMessage() {} func (x *CodeGenerateRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[34] + mi := &file_pkg_server_server_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2234,7 +2606,7 @@ func (x *CodeGenerateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CodeGenerateRequest.ProtoReflect.Descriptor instead. func (*CodeGenerateRequest) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{34} + return file_pkg_server_server_proto_rawDescGZIP(), []int{32} } func (x *CodeGenerateRequest) GetTestSuite() string { @@ -2269,7 +2641,7 @@ type Secrets struct { func (x *Secrets) Reset() { *x = Secrets{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[35] + mi := &file_pkg_server_server_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2282,7 +2654,7 @@ func (x *Secrets) String() string { func (*Secrets) ProtoMessage() {} func (x *Secrets) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[35] + mi := &file_pkg_server_server_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2295,7 +2667,7 @@ func (x *Secrets) ProtoReflect() protoreflect.Message { // Deprecated: Use Secrets.ProtoReflect.Descriptor instead. func (*Secrets) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{35} + return file_pkg_server_server_proto_rawDescGZIP(), []int{33} } func (x *Secrets) GetData() []*Secret { @@ -2318,7 +2690,7 @@ type Secret struct { func (x *Secret) Reset() { *x = Secret{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[36] + mi := &file_pkg_server_server_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2331,7 +2703,7 @@ func (x *Secret) String() string { func (*Secret) ProtoMessage() {} func (x *Secret) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[36] + mi := &file_pkg_server_server_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2344,7 +2716,7 @@ func (x *Secret) ProtoReflect() protoreflect.Message { // Deprecated: Use Secret.ProtoReflect.Descriptor instead. func (*Secret) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{36} + return file_pkg_server_server_proto_rawDescGZIP(), []int{34} } func (x *Secret) GetName() string { @@ -2382,7 +2754,7 @@ type ExtensionStatus struct { func (x *ExtensionStatus) Reset() { *x = ExtensionStatus{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[37] + mi := &file_pkg_server_server_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2395,7 +2767,7 @@ func (x *ExtensionStatus) String() string { func (*ExtensionStatus) ProtoMessage() {} func (x *ExtensionStatus) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[37] + mi := &file_pkg_server_server_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2408,7 +2780,7 @@ func (x *ExtensionStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use ExtensionStatus.ProtoReflect.Descriptor instead. func (*ExtensionStatus) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{37} + return file_pkg_server_server_proto_rawDescGZIP(), []int{35} } func (x *ExtensionStatus) GetReady() bool { @@ -2450,7 +2822,7 @@ type PProfRequest struct { func (x *PProfRequest) Reset() { *x = PProfRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[38] + mi := &file_pkg_server_server_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2463,7 +2835,7 @@ func (x *PProfRequest) String() string { func (*PProfRequest) ProtoMessage() {} func (x *PProfRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[38] + mi := &file_pkg_server_server_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2476,7 +2848,7 @@ func (x *PProfRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PProfRequest.ProtoReflect.Descriptor instead. func (*PProfRequest) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{38} + return file_pkg_server_server_proto_rawDescGZIP(), []int{36} } func (x *PProfRequest) GetName() string { @@ -2497,7 +2869,7 @@ type PProfData struct { func (x *PProfData) Reset() { *x = PProfData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[39] + mi := &file_pkg_server_server_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2510,7 +2882,7 @@ func (x *PProfData) String() string { func (*PProfData) ProtoMessage() {} func (x *PProfData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[39] + mi := &file_pkg_server_server_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2523,7 +2895,7 @@ func (x *PProfData) ProtoReflect() protoreflect.Message { // Deprecated: Use PProfData.ProtoReflect.Descriptor instead. func (*PProfData) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{39} + return file_pkg_server_server_proto_rawDescGZIP(), []int{37} } func (x *PProfData) GetData() []byte { @@ -2542,7 +2914,7 @@ type Empty struct { func (x *Empty) Reset() { *x = Empty{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[40] + mi := &file_pkg_server_server_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2555,7 +2927,7 @@ func (x *Empty) String() string { func (*Empty) ProtoMessage() {} func (x *Empty) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[40] + mi := &file_pkg_server_server_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2568,7 +2940,7 @@ func (x *Empty) ProtoReflect() protoreflect.Message { // Deprecated: Use Empty.ProtoReflect.Descriptor instead. func (*Empty) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{40} + return file_pkg_server_server_proto_rawDescGZIP(), []int{38} } type MockConfig struct { @@ -2583,7 +2955,7 @@ type MockConfig struct { func (x *MockConfig) Reset() { *x = MockConfig{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[41] + mi := &file_pkg_server_server_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2596,7 +2968,7 @@ func (x *MockConfig) String() string { func (*MockConfig) ProtoMessage() {} func (x *MockConfig) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[41] + mi := &file_pkg_server_server_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2609,7 +2981,7 @@ func (x *MockConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use MockConfig.ProtoReflect.Descriptor instead. func (*MockConfig) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{41} + return file_pkg_server_server_proto_rawDescGZIP(), []int{39} } func (x *MockConfig) GetPrefix() string { @@ -2694,517 +3066,396 @@ var File_pkg_server_server_proto protoreflect.FileDescriptor var file_pkg_server_server_proto_rawDesc = []byte{ 0x0a, 0x17, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x7e, 0x0a, 0x06, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x46, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, - 0x74, 0x65, 0x6d, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x2f, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, - 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, - 0x22, 0x72, 0x0a, 0x10, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x75, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, - 0x73, 0x74, 0x63, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, - 0x73, 0x74, 0x63, 0x61, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x22, 0x4b, 0x0a, 0x0f, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, - 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, - 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x12, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x7a, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x61, 0x70, 0x69, 0x12, 0x22, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, - 0x72, 0x52, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x23, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x41, 0x50, 0x49, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x62, 0x0a, - 0x11, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x43, 0x61, - 0x73, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x73, 0x75, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, - 0x75, 0x69, 0x74, 0x65, 0x52, 0x05, 0x73, 0x75, 0x69, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x04, 0x63, - 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, 0x04, 0x63, 0x61, 0x73, - 0x65, 0x22, 0x76, 0x0a, 0x07, 0x41, 0x50, 0x49, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, - 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, - 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x03, 0x72, 0x70, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x50, 0x43, 0x52, 0x03, 0x72, 0x70, - 0x63, 0x12, 0x26, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, - 0x65, 0x52, 0x06, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x22, 0x7a, 0x0a, 0x06, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x63, 0x65, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, - 0x65, 0x72, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x63, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x95, 0x01, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x16, 0x0a, - 0x06, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x69, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, - 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x72, - 0x61, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x61, 0x77, 0x22, 0x4d, 0x0a, - 0x11, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x69, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x68, 0x0a, 0x12, - 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x75, 0x69, 0x74, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x53, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x75, 0x69, - 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb7, 0x01, 0x0a, 0x11, 0x54, 0x65, 0x73, 0x74, 0x43, - 0x61, 0x73, 0x65, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x0f, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x75, 0x69, - 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x43, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, - 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, - 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x43, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0xf7, 0x01, 0x0a, 0x08, 0x54, 0x65, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x12, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2b, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, - 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x2e, 0x45, 0x6e, 0x76, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x03, 0x65, 0x6e, 0x76, 0x12, 0x2c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x1a, 0x36, 0x0a, 0x08, 0x45, 0x6e, 0x76, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7c, 0x0a, 0x0a, 0x54, 0x65, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3e, 0x0a, 0x0e, 0x74, 0x65, 0x73, 0x74, - 0x43, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, - 0x73, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0e, 0x74, 0x65, 0x73, 0x74, 0x43, 0x61, - 0x73, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3c, 0x0a, 0x0a, 0x48, 0x65, 0x6c, 0x6c, - 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x72, 0x22, 0x7e, 0x0a, 0x06, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x46, 0x0a, 0x09, 0x44, 0x61, 0x74, + 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x2f, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, + 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, + 0x6e, 0x64, 0x22, 0x72, 0x0a, 0x10, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x75, 0x69, 0x74, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x74, 0x65, 0x73, 0x74, 0x63, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x74, 0x65, 0x73, 0x74, 0x63, 0x61, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0x4b, 0x0a, 0x0f, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, + 0x69, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x7a, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x61, 0x70, 0x69, 0x12, 0x22, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, + 0x61, 0x69, 0x72, 0x52, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x23, 0x0a, 0x04, 0x73, 0x70, + 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x41, 0x50, 0x49, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, + 0x62, 0x0a, 0x11, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, + 0x43, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x73, 0x75, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, + 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x52, 0x05, 0x73, 0x75, 0x69, 0x74, 0x65, 0x12, 0x24, 0x0a, + 0x04, 0x63, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, 0x04, 0x63, + 0x61, 0x73, 0x65, 0x22, 0x76, 0x0a, 0x07, 0x41, 0x50, 0x49, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, + 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, + 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x03, 0x72, 0x70, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x50, 0x43, 0x52, 0x03, + 0x72, 0x70, 0x63, 0x12, 0x26, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x65, 0x52, 0x06, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x22, 0x7a, 0x0a, 0x06, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x63, 0x65, 0x72, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x63, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x95, 0x01, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, + 0x16, 0x0a, 0x06, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x06, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x65, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x72, 0x61, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x61, 0x77, 0x22, + 0x4d, 0x0a, 0x11, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x69, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, + 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xf7, + 0x01, 0x0a, 0x08, 0x54, 0x65, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, + 0x69, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2b, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, + 0x54, 0x61, 0x73, 0x6b, 0x2e, 0x45, 0x6e, 0x76, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x65, + 0x6e, 0x76, 0x12, 0x2c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x50, 0x61, 0x69, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x1a, 0x36, 0x0a, 0x08, 0x45, 0x6e, 0x76, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7c, 0x0a, 0x0a, 0x54, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1e, 0x0a, 0x08, 0x59, 0x61, 0x6d, 0x6c, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x55, 0x0a, 0x05, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x61, 0x70, 0x69, 0x12, 0x26, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, - 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x57, 0x0a, - 0x11, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x53, 0x75, 0x69, - 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x24, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3e, 0x0a, 0x0e, 0x74, 0x65, 0x73, 0x74, 0x43, 0x61, + 0x73, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x31, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, - 0x73, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, - 0x61, 0x73, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x95, 0x01, 0x0a, 0x08, 0x54, 0x65, - 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x75, - 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, - 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xd9, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x61, 0x70, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x69, 0x12, - 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x24, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, - 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x24, 0x0a, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, - 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x20, 0x0a, 0x04, 0x66, 0x6f, 0x72, 0x6d, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, - 0x61, 0x69, 0x72, 0x52, 0x04, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, - 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x97, 0x02, - 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, - 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x24, - 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x06, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x10, 0x62, 0x6f, 0x64, 0x79, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x10, 0x62, 0x6f, - 0x64, 0x79, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x12, 0x16, - 0x0a, 0x06, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x47, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x11, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x49, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x1c, 0x0a, 0x09, - 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x65, - 0x72, 0x69, 0x66, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x22, 0xa8, 0x01, 0x0a, 0x0e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, - 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x24, 0x0a, 0x06, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, - 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x2e, 0x0a, - 0x04, 0x50, 0x61, 0x69, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x29, 0x0a, - 0x05, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, - 0x69, 0x72, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x21, 0x0a, 0x0b, 0x53, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x2b, 0x0a, 0x06, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc0, 0x02, 0x0a, 0x05, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, - 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, - 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x72, 0x65, - 0x61, 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, - 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x33, 0x0a, 0x0a, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x4b, 0x0a, 0x09, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0e, 0x74, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3c, 0x0a, 0x0a, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1e, 0x0a, 0x08, 0x59, 0x61, 0x6d, 0x6c, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x22, 0x55, 0x0a, 0x05, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x75, 0x72, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x42, 0x0a, - 0x0c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x2e, 0x0a, 0x0a, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x20, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x20, 0x0a, 0x0a, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x22, 0x6d, 0x0a, 0x13, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x65, - 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x54, - 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x65, 0x73, 0x74, - 0x43, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x54, 0x65, 0x73, 0x74, - 0x43, 0x61, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x22, 0x2d, 0x0a, 0x07, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x22, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x54, 0x0a, 0x06, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x44, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x77, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, - 0x61, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, - 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0x22, 0x0a, 0x0c, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x61, 0x70, 0x69, 0x12, 0x26, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, + 0x43, 0x61, 0x73, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x57, 0x0a, 0x11, 0x54, + 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x53, 0x75, 0x69, 0x74, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, + 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x22, 0x31, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, + 0x73, 0x12, 0x24, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, + 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x95, 0x01, 0x0a, 0x08, 0x54, 0x65, 0x73, 0x74, + 0x43, 0x61, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x75, 0x69, 0x74, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x75, 0x69, + 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0xd9, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, + 0x70, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x69, 0x12, 0x16, 0x0a, + 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x24, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, + 0x61, 0x69, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x05, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, + 0x24, 0x0a, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x06, 0x63, + 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x20, 0x0a, 0x04, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, + 0x72, 0x52, 0x04, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x97, 0x02, 0x0a, 0x08, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x24, 0x0a, 0x06, + 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x12, 0x38, 0x0a, 0x10, 0x62, 0x6f, 0x64, 0x79, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, + 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x10, 0x62, 0x6f, 0x64, 0x79, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x12, 0x47, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x11, 0x43, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x49, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x63, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x65, 0x72, 0x69, + 0x66, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, + 0x22, 0xa8, 0x01, 0x0a, 0x0e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x24, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x14, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x2e, 0x0a, 0x04, 0x50, + 0x61, 0x69, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x29, 0x0a, 0x05, 0x50, + 0x61, 0x69, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x21, 0x0a, 0x0b, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x2b, 0x0a, 0x06, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc0, 0x02, 0x0a, 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1f, 0x0a, 0x09, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3c, - 0x0a, 0x0a, 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, - 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x72, - 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x4f, 0x0a, 0x07, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x65, 0x32, 0xa0, 0x1b, - 0x0a, 0x06, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, - 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x54, 0x61, 0x73, - 0x6b, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x5f, 0x0a, - 0x0c, 0x52, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x1c, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, - 0x6e, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x28, 0x01, 0x30, 0x01, 0x12, 0x42, - 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0e, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, - 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, + 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1a, + 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, + 0x65, 0x61, 0x64, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, + 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1a, 0x0a, + 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x33, 0x0a, 0x0a, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4b, + 0x0a, 0x09, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, + 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x42, 0x0a, 0x0c, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x2e, 0x0a, 0x0a, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x20, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x20, 0x0a, 0x0a, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0x6d, 0x0a, 0x13, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, + 0x53, 0x75, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x54, 0x65, 0x73, + 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, + 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, + 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x22, 0x2d, 0x0a, 0x07, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x54, 0x0a, 0x06, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x77, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x12, 0x1a, + 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x22, + 0x0a, 0x0c, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x22, 0x1f, 0x0a, 0x09, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3c, 0x0a, 0x0a, + 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x32, 0x80, 0x10, 0x0a, 0x06, 0x52, + 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x2d, 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, 0x10, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x1a, 0x12, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, + 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, + 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, - 0x65, 0x70, 0x6c, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, - 0x5f, 0x0a, 0x0f, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, - 0x74, 0x65, 0x12, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, - 0x53, 0x75, 0x69, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x14, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x12, 0x5b, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, - 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, - 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x22, 0x1d, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x5a, 0x0a, - 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, - 0x12, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, - 0x69, 0x74, 0x65, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, - 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x1a, - 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x5f, 0x0a, 0x0f, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1d, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x17, 0x2a, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, - 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x7b, 0x0a, 0x12, 0x44, 0x75, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, - 0x12, 0x1a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, - 0x69, 0x74, 0x65, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x1a, 0x12, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x53, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x75, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x63, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x65, - 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x59, 0x61, 0x6d, 0x6c, 0x12, 0x19, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x59, 0x61, 0x6d, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, - 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x79, 0x61, 0x6d, 0x6c, 0x12, 0x5d, 0x0a, 0x0c, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x53, 0x75, 0x69, 0x74, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x12, 0x74, 0x0a, 0x0b, 0x52, - 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x18, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, - 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x33, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, - 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x75, 0x69, 0x74, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, - 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x73, 0x74, 0x63, 0x61, 0x73, 0x65, 0x7d, 0x2f, 0x72, 0x75, - 0x6e, 0x12, 0x6a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, - 0x12, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, - 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, - 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x75, 0x69, 0x74, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, - 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x73, 0x74, 0x63, 0x61, 0x73, 0x65, 0x7d, 0x12, 0x6c, 0x0a, - 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, - 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, - 0x65, 0x57, 0x69, 0x74, 0x68, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x2b, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x78, 0x0a, 0x0e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x57, - 0x69, 0x74, 0x68, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x37, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x31, 0x1a, 0x2c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, - 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x2a, 0x27, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, - 0x75, 0x69, 0x74, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x73, - 0x74, 0x63, 0x61, 0x73, 0x65, 0x7d, 0x12, 0x90, 0x01, 0x0a, 0x11, 0x44, 0x75, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x44, 0x75, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x4c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x46, 0x22, 0x41, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, - 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x75, 0x69, 0x74, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x43, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x75, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x5f, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0f, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0c, 0x47, 0x65, + 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, + 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x0f, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, + 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, + 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x10, 0x47, 0x65, + 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x59, 0x61, 0x6d, 0x6c, 0x12, 0x19, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, + 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x59, 0x61, 0x6d, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x12, 0x3a, 0x0a, + 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x53, 0x75, 0x69, 0x74, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x50, 0x49, 0x73, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x73, 0x22, 0x1d, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x67, - 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x50, 0x49, 0x73, 0x12, 0x56, 0x0a, 0x11, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, - 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x73, 0x12, 0x6d, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x3a, 0x01, - 0x2a, 0x12, 0x4e, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, - 0x65, 0x72, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, - 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x72, - 0x73, 0x12, 0x6c, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x54, 0x65, 0x73, 0x74, - 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, - 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, - 0x22, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x12, - 0x4e, 0x0a, 0x0e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, - 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, - 0x4f, 0x0a, 0x0e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, - 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x5e, 0x0a, 0x14, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0d, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x1e, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x28, 0x01, 0x30, 0x01, - 0x12, 0x45, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0d, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x17, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x06, 0x53, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, - 0x65, 0x70, 0x6c, 0x79, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x0d, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x73, 0x12, 0x0d, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x73, - 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x12, 0x42, - 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0e, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x73, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, - 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x4d, 0x0a, 0x0b, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x1a, - 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x4a, 0x0a, 0x0b, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x15, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x5d, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, - 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, - 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x45, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x73, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x50, 0x0a, 0x0c, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, + 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x73, 0x22, 0x00, 0x12, 0x41, 0x0a, + 0x0b, 0x52, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x18, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, + 0x12, 0x3b, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, + 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, + 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, + 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, + 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, + 0x12, 0x41, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, + 0x73, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, + 0x43, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x12, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, + 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, + 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, + 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, + 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x64, + 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x00, 0x12, + 0x43, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x1b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x22, 0x00, 0x12, 0x34, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x76, + 0x65, 0x72, 0x74, 0x65, 0x72, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, + 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x10, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1b, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x54, 0x0a, - 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x16, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x4e, 0x61, - 0x6d, 0x65, 0x7d, 0x12, 0x57, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1b, 0x1a, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x73, 0x2f, 0x7b, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x32, 0x0a, 0x05, - 0x50, 0x50, 0x72, 0x6f, 0x66, 0x12, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, - 0x50, 0x72, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, - 0x32, 0x6b, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x57, 0x69, 0x74, - 0x68, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x20, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x72, 0x75, 0x6e, 0x3a, 0x01, 0x2a, 0x32, 0xa0, 0x01, - 0x0a, 0x04, 0x4d, 0x6f, 0x63, 0x6b, 0x12, 0x4b, 0x0a, 0x06, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, - 0x12, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x63, 0x6b, 0x2f, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, - 0x3a, 0x01, 0x2a, 0x12, 0x4b, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x63, 0x6b, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, - 0x69, 0x6e, 0x75, 0x78, 0x73, 0x75, 0x72, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2d, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x22, 0x00, 0x12, 0x30, 0x0a, 0x0e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, + 0x69, 0x72, 0x73, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0d, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x00, 0x12, 0x40, 0x0a, + 0x14, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, + 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, + 0x31, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0d, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x06, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x0d, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, + 0x00, 0x12, 0x34, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, + 0x64, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x4b, 0x69, 0x6e, 0x64, 0x73, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x73, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, + 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0x00, 0x12, 0x2e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, + 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, + 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, + 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x05, 0x50, 0x50, 0x72, + 0x6f, 0x66, 0x12, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x50, 0x72, 0x6f, + 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x32, 0x4b, 0x0a, + 0x0f, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x38, 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x43, 0x61, + 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x32, 0x67, 0x0a, 0x04, 0x4d, 0x6f, + 0x63, 0x6b, 0x12, 0x2d, 0x0a, 0x06, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x12, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x00, 0x12, 0x30, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0d, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x22, 0x00, 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x73, 0x75, 0x72, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, + 0x2d, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3219,7 +3470,7 @@ func file_pkg_server_server_proto_rawDescGZIP() []byte { return file_pkg_server_server_proto_rawDescData } -var file_pkg_server_server_proto_msgTypes = make([]protoimpl.MessageInfo, 45) +var file_pkg_server_server_proto_msgTypes = make([]protoimpl.MessageInfo, 42) var file_pkg_server_server_proto_goTypes = []interface{}{ (*Suites)(nil), // 0: server.Suites (*Items)(nil), // 1: server.Items @@ -3231,159 +3482,150 @@ var file_pkg_server_server_proto_goTypes = []interface{}{ (*Secure)(nil), // 7: server.Secure (*RPC)(nil), // 8: server.RPC (*TestSuiteIdentity)(nil), // 9: server.TestSuiteIdentity - (*TestSuiteDuplicate)(nil), // 10: server.TestSuiteDuplicate - (*TestCaseDuplicate)(nil), // 11: server.TestCaseDuplicate - (*TestTask)(nil), // 12: server.TestTask - (*TestResult)(nil), // 13: server.TestResult - (*HelloReply)(nil), // 14: server.HelloReply - (*YamlData)(nil), // 15: server.YamlData - (*Suite)(nil), // 16: server.Suite - (*TestCaseWithSuite)(nil), // 17: server.TestCaseWithSuite - (*TestCases)(nil), // 18: server.TestCases - (*TestCase)(nil), // 19: server.TestCase - (*Request)(nil), // 20: server.Request - (*Response)(nil), // 21: server.Response - (*ConditionalVerify)(nil), // 22: server.ConditionalVerify - (*TestCaseResult)(nil), // 23: server.TestCaseResult - (*Pair)(nil), // 24: server.Pair - (*Pairs)(nil), // 25: server.Pairs - (*SimpleQuery)(nil), // 26: server.SimpleQuery - (*Stores)(nil), // 27: server.Stores - (*Store)(nil), // 28: server.Store - (*StoreKinds)(nil), // 29: server.StoreKinds - (*StoreKind)(nil), // 30: server.StoreKind - (*CommonResult)(nil), // 31: server.CommonResult - (*SimpleList)(nil), // 32: server.SimpleList - (*SimpleName)(nil), // 33: server.SimpleName - (*CodeGenerateRequest)(nil), // 34: server.CodeGenerateRequest - (*Secrets)(nil), // 35: server.Secrets - (*Secret)(nil), // 36: server.Secret - (*ExtensionStatus)(nil), // 37: server.ExtensionStatus - (*PProfRequest)(nil), // 38: server.PProfRequest - (*PProfData)(nil), // 39: server.PProfData - (*Empty)(nil), // 40: server.Empty - (*MockConfig)(nil), // 41: server.MockConfig - (*Version)(nil), // 42: server.Version - nil, // 43: server.Suites.DataEntry - nil, // 44: server.TestTask.EnvEntry + (*TestTask)(nil), // 10: server.TestTask + (*TestResult)(nil), // 11: server.TestResult + (*HelloReply)(nil), // 12: server.HelloReply + (*YamlData)(nil), // 13: server.YamlData + (*Suite)(nil), // 14: server.Suite + (*TestCaseWithSuite)(nil), // 15: server.TestCaseWithSuite + (*TestCases)(nil), // 16: server.TestCases + (*TestCase)(nil), // 17: server.TestCase + (*Request)(nil), // 18: server.Request + (*Response)(nil), // 19: server.Response + (*ConditionalVerify)(nil), // 20: server.ConditionalVerify + (*TestCaseResult)(nil), // 21: server.TestCaseResult + (*Pair)(nil), // 22: server.Pair + (*Pairs)(nil), // 23: server.Pairs + (*SimpleQuery)(nil), // 24: server.SimpleQuery + (*Stores)(nil), // 25: server.Stores + (*Store)(nil), // 26: server.Store + (*StoreKinds)(nil), // 27: server.StoreKinds + (*StoreKind)(nil), // 28: server.StoreKind + (*CommonResult)(nil), // 29: server.CommonResult + (*SimpleList)(nil), // 30: server.SimpleList + (*SimpleName)(nil), // 31: server.SimpleName + (*CodeGenerateRequest)(nil), // 32: server.CodeGenerateRequest + (*Secrets)(nil), // 33: server.Secrets + (*Secret)(nil), // 34: server.Secret + (*ExtensionStatus)(nil), // 35: server.ExtensionStatus + (*PProfRequest)(nil), // 36: server.PProfRequest + (*PProfData)(nil), // 37: server.PProfData + (*Empty)(nil), // 38: server.Empty + (*MockConfig)(nil), // 39: server.MockConfig + nil, // 40: server.Suites.DataEntry + nil, // 41: server.TestTask.EnvEntry } var file_pkg_server_server_proto_depIdxs = []int32{ - 43, // 0: server.Suites.data:type_name -> server.Suites.DataEntry - 24, // 1: server.TestCaseIdentity.parameters:type_name -> server.Pair - 24, // 2: server.TestSuite.param:type_name -> server.Pair + 40, // 0: server.Suites.data:type_name -> server.Suites.DataEntry + 22, // 1: server.TestCaseIdentity.parameters:type_name -> server.Pair + 22, // 2: server.TestSuite.param:type_name -> server.Pair 6, // 3: server.TestSuite.spec:type_name -> server.APISpec 4, // 4: server.TestSuiteWithCase.suite:type_name -> server.TestSuite - 19, // 5: server.TestSuiteWithCase.case:type_name -> server.TestCase + 17, // 5: server.TestSuiteWithCase.case:type_name -> server.TestCase 8, // 6: server.APISpec.rpc:type_name -> server.RPC 7, // 7: server.APISpec.secure:type_name -> server.Secure - 44, // 8: server.TestTask.env:type_name -> server.TestTask.EnvEntry - 24, // 9: server.TestTask.parameters:type_name -> server.Pair - 23, // 10: server.TestResult.testCaseResult:type_name -> server.TestCaseResult - 19, // 11: server.Suite.items:type_name -> server.TestCase - 19, // 12: server.TestCaseWithSuite.data:type_name -> server.TestCase - 19, // 13: server.TestCases.data:type_name -> server.TestCase - 20, // 14: server.TestCase.request:type_name -> server.Request - 21, // 15: server.TestCase.response:type_name -> server.Response - 24, // 16: server.Request.header:type_name -> server.Pair - 24, // 17: server.Request.query:type_name -> server.Pair - 24, // 18: server.Request.cookie:type_name -> server.Pair - 24, // 19: server.Request.form:type_name -> server.Pair - 24, // 20: server.Response.header:type_name -> server.Pair - 24, // 21: server.Response.bodyFieldsExpect:type_name -> server.Pair - 22, // 22: server.Response.ConditionalVerify:type_name -> server.ConditionalVerify - 24, // 23: server.TestCaseResult.header:type_name -> server.Pair - 24, // 24: server.Pairs.data:type_name -> server.Pair - 28, // 25: server.Stores.data:type_name -> server.Store - 24, // 26: server.Store.properties:type_name -> server.Pair - 30, // 27: server.Store.kind:type_name -> server.StoreKind - 30, // 28: server.StoreKinds.data:type_name -> server.StoreKind - 24, // 29: server.SimpleList.data:type_name -> server.Pair - 36, // 30: server.Secrets.data:type_name -> server.Secret + 41, // 8: server.TestTask.env:type_name -> server.TestTask.EnvEntry + 22, // 9: server.TestTask.parameters:type_name -> server.Pair + 21, // 10: server.TestResult.testCaseResult:type_name -> server.TestCaseResult + 17, // 11: server.Suite.items:type_name -> server.TestCase + 17, // 12: server.TestCaseWithSuite.data:type_name -> server.TestCase + 17, // 13: server.TestCases.data:type_name -> server.TestCase + 18, // 14: server.TestCase.request:type_name -> server.Request + 19, // 15: server.TestCase.response:type_name -> server.Response + 22, // 16: server.Request.header:type_name -> server.Pair + 22, // 17: server.Request.query:type_name -> server.Pair + 22, // 18: server.Request.cookie:type_name -> server.Pair + 22, // 19: server.Request.form:type_name -> server.Pair + 22, // 20: server.Response.header:type_name -> server.Pair + 22, // 21: server.Response.bodyFieldsExpect:type_name -> server.Pair + 20, // 22: server.Response.ConditionalVerify:type_name -> server.ConditionalVerify + 22, // 23: server.TestCaseResult.header:type_name -> server.Pair + 22, // 24: server.Pairs.data:type_name -> server.Pair + 26, // 25: server.Stores.data:type_name -> server.Store + 22, // 26: server.Store.properties:type_name -> server.Pair + 28, // 27: server.Store.kind:type_name -> server.StoreKind + 28, // 28: server.StoreKinds.data:type_name -> server.StoreKind + 22, // 29: server.SimpleList.data:type_name -> server.Pair + 34, // 30: server.Secrets.data:type_name -> server.Secret 1, // 31: server.Suites.DataEntry.value:type_name -> server.Items - 12, // 32: server.Runner.Run:input_type -> server.TestTask - 9, // 33: server.Runner.RunTestSuite:input_type -> server.TestSuiteIdentity - 40, // 34: server.Runner.GetSuites:input_type -> server.Empty - 9, // 35: server.Runner.CreateTestSuite:input_type -> server.TestSuiteIdentity - 3, // 36: server.Runner.ImportTestSuite:input_type -> server.TestSuiteSource - 9, // 37: server.Runner.GetTestSuite:input_type -> server.TestSuiteIdentity - 4, // 38: server.Runner.UpdateTestSuite:input_type -> server.TestSuite - 9, // 39: server.Runner.DeleteTestSuite:input_type -> server.TestSuiteIdentity - 10, // 40: server.Runner.DuplicateTestSuite:input_type -> server.TestSuiteDuplicate - 9, // 41: server.Runner.GetTestSuiteYaml:input_type -> server.TestSuiteIdentity - 9, // 42: server.Runner.ListTestCase:input_type -> server.TestSuiteIdentity - 2, // 43: server.Runner.RunTestCase:input_type -> server.TestCaseIdentity - 2, // 44: server.Runner.GetTestCase:input_type -> server.TestCaseIdentity - 17, // 45: server.Runner.CreateTestCase:input_type -> server.TestCaseWithSuite - 17, // 46: server.Runner.UpdateTestCase:input_type -> server.TestCaseWithSuite - 2, // 47: server.Runner.DeleteTestCase:input_type -> server.TestCaseIdentity - 11, // 48: server.Runner.DuplicateTestCase:input_type -> server.TestCaseDuplicate - 9, // 49: server.Runner.GetSuggestedAPIs:input_type -> server.TestSuiteIdentity - 40, // 50: server.Runner.ListCodeGenerator:input_type -> server.Empty - 34, // 51: server.Runner.GenerateCode:input_type -> server.CodeGenerateRequest - 40, // 52: server.Runner.ListConverter:input_type -> server.Empty - 34, // 53: server.Runner.ConvertTestSuite:input_type -> server.CodeGenerateRequest - 40, // 54: server.Runner.PopularHeaders:input_type -> server.Empty - 26, // 55: server.Runner.FunctionsQuery:input_type -> server.SimpleQuery - 26, // 56: server.Runner.FunctionsQueryStream:input_type -> server.SimpleQuery - 40, // 57: server.Runner.GetVersion:input_type -> server.Empty - 40, // 58: server.Runner.Sample:input_type -> server.Empty - 40, // 59: server.Runner.GetStoreKinds:input_type -> server.Empty - 40, // 60: server.Runner.GetStores:input_type -> server.Empty - 28, // 61: server.Runner.CreateStore:input_type -> server.Store - 28, // 62: server.Runner.UpdateStore:input_type -> server.Store - 28, // 63: server.Runner.DeleteStore:input_type -> server.Store - 26, // 64: server.Runner.VerifyStore:input_type -> server.SimpleQuery - 40, // 65: server.Runner.GetSecrets:input_type -> server.Empty - 36, // 66: server.Runner.CreateSecret:input_type -> server.Secret - 36, // 67: server.Runner.DeleteSecret:input_type -> server.Secret - 36, // 68: server.Runner.UpdateSecret:input_type -> server.Secret - 38, // 69: server.Runner.PProf:input_type -> server.PProfRequest - 5, // 70: server.RunnerExtension.Run:input_type -> server.TestSuiteWithCase - 41, // 71: server.Mock.Reload:input_type -> server.MockConfig - 40, // 72: server.Mock.GetConfig:input_type -> server.Empty - 13, // 73: server.Runner.Run:output_type -> server.TestResult - 13, // 74: server.Runner.RunTestSuite:output_type -> server.TestResult - 0, // 75: server.Runner.GetSuites:output_type -> server.Suites - 14, // 76: server.Runner.CreateTestSuite:output_type -> server.HelloReply - 31, // 77: server.Runner.ImportTestSuite:output_type -> server.CommonResult - 4, // 78: server.Runner.GetTestSuite:output_type -> server.TestSuite - 14, // 79: server.Runner.UpdateTestSuite:output_type -> server.HelloReply - 14, // 80: server.Runner.DeleteTestSuite:output_type -> server.HelloReply - 14, // 81: server.Runner.DuplicateTestSuite:output_type -> server.HelloReply - 15, // 82: server.Runner.GetTestSuiteYaml:output_type -> server.YamlData - 16, // 83: server.Runner.ListTestCase:output_type -> server.Suite - 23, // 84: server.Runner.RunTestCase:output_type -> server.TestCaseResult - 19, // 85: server.Runner.GetTestCase:output_type -> server.TestCase - 14, // 86: server.Runner.CreateTestCase:output_type -> server.HelloReply - 14, // 87: server.Runner.UpdateTestCase:output_type -> server.HelloReply - 14, // 88: server.Runner.DeleteTestCase:output_type -> server.HelloReply - 14, // 89: server.Runner.DuplicateTestCase:output_type -> server.HelloReply - 18, // 90: server.Runner.GetSuggestedAPIs:output_type -> server.TestCases - 32, // 91: server.Runner.ListCodeGenerator:output_type -> server.SimpleList - 31, // 92: server.Runner.GenerateCode:output_type -> server.CommonResult - 32, // 93: server.Runner.ListConverter:output_type -> server.SimpleList - 31, // 94: server.Runner.ConvertTestSuite:output_type -> server.CommonResult - 25, // 95: server.Runner.PopularHeaders:output_type -> server.Pairs - 25, // 96: server.Runner.FunctionsQuery:output_type -> server.Pairs - 25, // 97: server.Runner.FunctionsQueryStream:output_type -> server.Pairs - 42, // 98: server.Runner.GetVersion:output_type -> server.Version - 14, // 99: server.Runner.Sample:output_type -> server.HelloReply - 29, // 100: server.Runner.GetStoreKinds:output_type -> server.StoreKinds - 27, // 101: server.Runner.GetStores:output_type -> server.Stores - 28, // 102: server.Runner.CreateStore:output_type -> server.Store - 28, // 103: server.Runner.UpdateStore:output_type -> server.Store - 28, // 104: server.Runner.DeleteStore:output_type -> server.Store - 37, // 105: server.Runner.VerifyStore:output_type -> server.ExtensionStatus - 35, // 106: server.Runner.GetSecrets:output_type -> server.Secrets - 31, // 107: server.Runner.CreateSecret:output_type -> server.CommonResult - 31, // 108: server.Runner.DeleteSecret:output_type -> server.CommonResult - 31, // 109: server.Runner.UpdateSecret:output_type -> server.CommonResult - 39, // 110: server.Runner.PProf:output_type -> server.PProfData - 31, // 111: server.RunnerExtension.Run:output_type -> server.CommonResult - 40, // 112: server.Mock.Reload:output_type -> server.Empty - 41, // 113: server.Mock.GetConfig:output_type -> server.MockConfig - 73, // [73:114] is the sub-list for method output_type - 32, // [32:73] is the sub-list for method input_type + 10, // 32: server.Runner.Run:input_type -> server.TestTask + 38, // 33: server.Runner.GetSuites:input_type -> server.Empty + 9, // 34: server.Runner.CreateTestSuite:input_type -> server.TestSuiteIdentity + 3, // 35: server.Runner.ImportTestSuite:input_type -> server.TestSuiteSource + 9, // 36: server.Runner.GetTestSuite:input_type -> server.TestSuiteIdentity + 4, // 37: server.Runner.UpdateTestSuite:input_type -> server.TestSuite + 9, // 38: server.Runner.DeleteTestSuite:input_type -> server.TestSuiteIdentity + 9, // 39: server.Runner.GetTestSuiteYaml:input_type -> server.TestSuiteIdentity + 9, // 40: server.Runner.ListTestCase:input_type -> server.TestSuiteIdentity + 9, // 41: server.Runner.GetSuggestedAPIs:input_type -> server.TestSuiteIdentity + 2, // 42: server.Runner.RunTestCase:input_type -> server.TestCaseIdentity + 2, // 43: server.Runner.GetTestCase:input_type -> server.TestCaseIdentity + 15, // 44: server.Runner.CreateTestCase:input_type -> server.TestCaseWithSuite + 15, // 45: server.Runner.UpdateTestCase:input_type -> server.TestCaseWithSuite + 2, // 46: server.Runner.DeleteTestCase:input_type -> server.TestCaseIdentity + 38, // 47: server.Runner.ListCodeGenerator:input_type -> server.Empty + 32, // 48: server.Runner.GenerateCode:input_type -> server.CodeGenerateRequest + 38, // 49: server.Runner.ListConverter:input_type -> server.Empty + 32, // 50: server.Runner.ConvertTestSuite:input_type -> server.CodeGenerateRequest + 38, // 51: server.Runner.PopularHeaders:input_type -> server.Empty + 24, // 52: server.Runner.FunctionsQuery:input_type -> server.SimpleQuery + 24, // 53: server.Runner.FunctionsQueryStream:input_type -> server.SimpleQuery + 38, // 54: server.Runner.GetVersion:input_type -> server.Empty + 38, // 55: server.Runner.Sample:input_type -> server.Empty + 38, // 56: server.Runner.GetStoreKinds:input_type -> server.Empty + 38, // 57: server.Runner.GetStores:input_type -> server.Empty + 26, // 58: server.Runner.CreateStore:input_type -> server.Store + 26, // 59: server.Runner.UpdateStore:input_type -> server.Store + 26, // 60: server.Runner.DeleteStore:input_type -> server.Store + 24, // 61: server.Runner.VerifyStore:input_type -> server.SimpleQuery + 38, // 62: server.Runner.GetSecrets:input_type -> server.Empty + 34, // 63: server.Runner.CreateSecret:input_type -> server.Secret + 34, // 64: server.Runner.DeleteSecret:input_type -> server.Secret + 34, // 65: server.Runner.UpdateSecret:input_type -> server.Secret + 36, // 66: server.Runner.PProf:input_type -> server.PProfRequest + 5, // 67: server.RunnerExtension.Run:input_type -> server.TestSuiteWithCase + 39, // 68: server.Mock.Reload:input_type -> server.MockConfig + 38, // 69: server.Mock.GetConfig:input_type -> server.Empty + 11, // 70: server.Runner.Run:output_type -> server.TestResult + 0, // 71: server.Runner.GetSuites:output_type -> server.Suites + 12, // 72: server.Runner.CreateTestSuite:output_type -> server.HelloReply + 29, // 73: server.Runner.ImportTestSuite:output_type -> server.CommonResult + 4, // 74: server.Runner.GetTestSuite:output_type -> server.TestSuite + 12, // 75: server.Runner.UpdateTestSuite:output_type -> server.HelloReply + 12, // 76: server.Runner.DeleteTestSuite:output_type -> server.HelloReply + 13, // 77: server.Runner.GetTestSuiteYaml:output_type -> server.YamlData + 14, // 78: server.Runner.ListTestCase:output_type -> server.Suite + 16, // 79: server.Runner.GetSuggestedAPIs:output_type -> server.TestCases + 21, // 80: server.Runner.RunTestCase:output_type -> server.TestCaseResult + 17, // 81: server.Runner.GetTestCase:output_type -> server.TestCase + 12, // 82: server.Runner.CreateTestCase:output_type -> server.HelloReply + 12, // 83: server.Runner.UpdateTestCase:output_type -> server.HelloReply + 12, // 84: server.Runner.DeleteTestCase:output_type -> server.HelloReply + 30, // 85: server.Runner.ListCodeGenerator:output_type -> server.SimpleList + 29, // 86: server.Runner.GenerateCode:output_type -> server.CommonResult + 30, // 87: server.Runner.ListConverter:output_type -> server.SimpleList + 29, // 88: server.Runner.ConvertTestSuite:output_type -> server.CommonResult + 23, // 89: server.Runner.PopularHeaders:output_type -> server.Pairs + 23, // 90: server.Runner.FunctionsQuery:output_type -> server.Pairs + 23, // 91: server.Runner.FunctionsQueryStream:output_type -> server.Pairs + 12, // 92: server.Runner.GetVersion:output_type -> server.HelloReply + 12, // 93: server.Runner.Sample:output_type -> server.HelloReply + 27, // 94: server.Runner.GetStoreKinds:output_type -> server.StoreKinds + 25, // 95: server.Runner.GetStores:output_type -> server.Stores + 26, // 96: server.Runner.CreateStore:output_type -> server.Store + 26, // 97: server.Runner.UpdateStore:output_type -> server.Store + 26, // 98: server.Runner.DeleteStore:output_type -> server.Store + 35, // 99: server.Runner.VerifyStore:output_type -> server.ExtensionStatus + 33, // 100: server.Runner.GetSecrets:output_type -> server.Secrets + 29, // 101: server.Runner.CreateSecret:output_type -> server.CommonResult + 29, // 102: server.Runner.DeleteSecret:output_type -> server.CommonResult + 29, // 103: server.Runner.UpdateSecret:output_type -> server.CommonResult + 37, // 104: server.Runner.PProf:output_type -> server.PProfData + 29, // 105: server.RunnerExtension.Run:output_type -> server.CommonResult + 38, // 106: server.Mock.Reload:output_type -> server.Empty + 39, // 107: server.Mock.GetConfig:output_type -> server.MockConfig + 70, // [70:108] is the sub-list for method output_type + 32, // [32:70] is the sub-list for method input_type 32, // [32:32] is the sub-list for extension type_name 32, // [32:32] is the sub-list for extension extendee 0, // [0:32] is the sub-list for field type_name @@ -3420,7 +3662,7 @@ func file_pkg_server_server_proto_init() { } } file_pkg_server_server_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TestCaseIdentity); i { + switch v := v.(*HistorySuites); i { case 0: return &v.state case 1: @@ -3432,7 +3674,7 @@ func file_pkg_server_server_proto_init() { } } file_pkg_server_server_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TestSuiteSource); i { + switch v := v.(*HistoryItems); i { case 0: return &v.state case 1: @@ -3444,7 +3686,7 @@ func file_pkg_server_server_proto_init() { } } file_pkg_server_server_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TestSuite); i { + switch v := v.(*HistoryCaseIdentity); i { case 0: return &v.state case 1: @@ -3456,7 +3698,7 @@ func file_pkg_server_server_proto_init() { } } file_pkg_server_server_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TestSuiteWithCase); i { + switch v := v.(*TestCaseIdentity); i { case 0: return &v.state case 1: @@ -3468,7 +3710,7 @@ func file_pkg_server_server_proto_init() { } } file_pkg_server_server_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*APISpec); i { + switch v := v.(*TestSuiteSource); i { case 0: return &v.state case 1: @@ -3480,7 +3722,7 @@ func file_pkg_server_server_proto_init() { } } file_pkg_server_server_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Secure); i { + switch v := v.(*TestSuite); i { case 0: return &v.state case 1: @@ -3492,7 +3734,7 @@ func file_pkg_server_server_proto_init() { } } file_pkg_server_server_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RPC); i { + switch v := v.(*TestSuiteWithCase); i { case 0: return &v.state case 1: @@ -3504,7 +3746,7 @@ func file_pkg_server_server_proto_init() { } } file_pkg_server_server_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TestSuiteIdentity); i { + switch v := v.(*APISpec); i { case 0: return &v.state case 1: @@ -3516,30 +3758,6 @@ func file_pkg_server_server_proto_init() { } } file_pkg_server_server_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TestSuiteDuplicate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_server_server_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TestCaseDuplicate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_server_server_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TestTask); i { case 0: return &v.state @@ -3551,7 +3769,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TestResult); i { case 0: return &v.state @@ -3563,7 +3781,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HelloReply); i { case 0: return &v.state @@ -3575,7 +3793,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*YamlData); i { case 0: return &v.state @@ -3587,7 +3805,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Suite); i { case 0: return &v.state @@ -3599,7 +3817,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TestCaseWithSuite); i { case 0: return &v.state @@ -3611,7 +3829,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TestCases); i { case 0: return &v.state @@ -3623,7 +3841,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TestCase); i { case 0: return &v.state @@ -3635,7 +3853,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Request); i { case 0: return &v.state @@ -3647,7 +3865,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Response); i { case 0: return &v.state @@ -3659,7 +3877,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConditionalVerify); i { case 0: return &v.state @@ -3671,7 +3889,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TestCaseResult); i { case 0: return &v.state @@ -3683,7 +3901,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Pair); i { case 0: return &v.state @@ -3695,7 +3913,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Pairs); i { case 0: return &v.state @@ -3707,7 +3925,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SimpleQuery); i { case 0: return &v.state @@ -3719,7 +3937,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Stores); i { case 0: return &v.state @@ -3731,7 +3949,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Store); i { case 0: return &v.state @@ -3743,7 +3961,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StoreKinds); i { case 0: return &v.state @@ -3755,7 +3973,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StoreKind); i { case 0: return &v.state @@ -3767,7 +3985,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CommonResult); i { case 0: return &v.state @@ -3779,7 +3997,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SimpleList); i { case 0: return &v.state @@ -3791,7 +4009,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SimpleName); i { case 0: return &v.state @@ -3803,7 +4021,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CodeGenerateRequest); i { case 0: return &v.state @@ -3815,7 +4033,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Secrets); i { case 0: return &v.state @@ -3827,7 +4045,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Secret); i { case 0: return &v.state @@ -3839,7 +4057,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExtensionStatus); i { case 0: return &v.state @@ -3851,7 +4069,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PProfRequest); i { case 0: return &v.state @@ -3863,7 +4081,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PProfData); i { case 0: return &v.state @@ -3875,7 +4093,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Empty); i { case 0: return &v.state @@ -3887,7 +4105,7 @@ func file_pkg_server_server_proto_init() { return nil } } - file_pkg_server_server_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_pkg_server_server_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MockConfig); i { case 0: return &v.state @@ -3918,7 +4136,7 @@ func file_pkg_server_server_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_server_server_proto_rawDesc, NumEnums: 0, - NumMessages: 45, + NumMessages: 42, NumExtensions: 0, NumServices: 3, }, diff --git a/pkg/server/server.pb.gw.go b/pkg/server/server.pb.gw.go index 6a4044347..1864985c5 100644 --- a/pkg/server/server.pb.gw.go +++ b/pkg/server/server.pb.gw.go @@ -990,6 +990,58 @@ func local_request_Runner_DeleteTestCase_0(ctx context.Context, marshaler runtim } +func request_Runner_GetHistorySuites_0(ctx context.Context, marshaler runtime.Marshaler, client RunnerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Empty + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetHistorySuites(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Runner_GetHistorySuites_0(ctx context.Context, marshaler runtime.Marshaler, server RunnerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Empty + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetHistorySuites(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Runner_GetHistoryTestCase_0(ctx context.Context, marshaler runtime.Marshaler, client RunnerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HistoryTestCase + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetHistoryTestCase(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Runner_GetHistoryTestCase_0(ctx context.Context, marshaler runtime.Marshaler, server RunnerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HistoryTestCase + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetHistoryTestCase(ctx, &protoReq) + return msg, metadata, err + +} + func request_Runner_DuplicateTestCase_0(ctx context.Context, marshaler runtime.Marshaler, client RunnerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq TestCaseDuplicate var metadata runtime.ServerMetadata @@ -2203,6 +2255,56 @@ func RegisterRunnerHandlerServer(ctx context.Context, mux *runtime.ServeMux, ser }) + mux.Handle("POST", pattern_Runner_GetHistorySuites_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/server.Runner/GetHistorySuites", runtime.WithHTTPPathPattern("/server.Runner/GetHistorySuites")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Runner_GetHistorySuites_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Runner_GetHistorySuites_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Runner_GetHistoryTestCase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/server.Runner/GetHistoryTestCase", runtime.WithHTTPPathPattern("/server.Runner/GetHistoryTestCase")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Runner_GetHistoryTestCase_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Runner_GetHistoryTestCase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_Runner_DuplicateTestCase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3221,6 +3323,50 @@ func RegisterRunnerHandlerClient(ctx context.Context, mux *runtime.ServeMux, cli }) + mux.Handle("POST", pattern_Runner_GetHistorySuites_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/server.Runner/GetHistorySuites", runtime.WithHTTPPathPattern("/server.Runner/GetHistorySuites")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Runner_GetHistorySuites_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Runner_GetHistorySuites_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Runner_GetHistoryTestCase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/server.Runner/GetHistoryTestCase", runtime.WithHTTPPathPattern("/server.Runner/GetHistoryTestCase")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Runner_GetHistoryTestCase_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Runner_GetHistoryTestCase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_Runner_DuplicateTestCase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3737,7 +3883,7 @@ var ( pattern_Runner_CreateTestCase_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "suites", "suiteName", "cases"}, "")) - pattern_Runner_UpdateTestCase_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "suites", "suiteName", "cases", "data.name"}, "")) + pattern_Runner_DeleteTestCase_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"server.Runner", "DeleteTestCase"}, "")) pattern_Runner_DeleteTestCase_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "suites", "suite", "cases", "testcase"}, "")) @@ -3819,10 +3965,6 @@ var ( forward_Runner_DeleteTestCase_0 = runtime.ForwardResponseMessage - forward_Runner_DuplicateTestCase_0 = runtime.ForwardResponseMessage - - forward_Runner_GetSuggestedAPIs_0 = runtime.ForwardResponseMessage - forward_Runner_ListCodeGenerator_0 = runtime.ForwardResponseMessage forward_Runner_GenerateCode_0 = runtime.ForwardResponseMessage diff --git a/pkg/server/server.proto b/pkg/server/server.proto index 9dae8f3df..cf93a0925 100644 --- a/pkg/server/server.proto +++ b/pkg/server/server.proto @@ -4,6 +4,8 @@ option go_package = "github.com/linuxsuren/api-testing/pkg/server"; package server; +import "google/protobuf/timestamp.proto"; + import "google/api/annotations.proto"; service Runner { @@ -112,6 +114,10 @@ service Runner { }; } + // history test related + rpc GetHistorySuites(Empty) returns (HistorySuites) {} + rpc GetHistoryTestCase(HistoryTestCase) returns (HistoryTestResult) {} + // code generator rpc ListCodeGenerator(Empty) returns (SimpleList) { option (google.api.http) = { @@ -246,6 +252,22 @@ message Items { string kind = 2; } +message HistorySuites { + map data = 1; +} + +message HistoryItems { + repeated HistoryCaseIdentity data = 1; +} + +message HistoryCaseIdentity { + string suite = 1; + string testcase = 2; + string historySuiteName = 3; + string kind = 4; + string ID = 5; +} + message TestCaseIdentity { string suite = 1; string testcase = 2; @@ -326,6 +348,15 @@ message TestResult { repeated TestCaseResult testCaseResult = 3; } +message HistoryTestResult { + string message = 1; + string error = 2; + repeated TestCaseResult testCaseResult = 3; + HistoryTestCase data = 4; + google.protobuf.Timestamp createTime = 5; +} + + message HelloReply { string message = 1; string error = 2; @@ -357,6 +388,19 @@ message TestCase { Response response = 4; } +message HistoryTestCase { + string caseName = 1; + string suiteName = 2; + string historySuiteName = 3; + google.protobuf.Timestamp createTime = 4; + repeated Pair suiteParam = 5; + APISpec suiteSpec = 6; + string suiteApi = 7; + Request request = 8; + Response response = 9; + string ID = 10; +} + message Request { string api = 1; string method = 2; @@ -462,18 +506,18 @@ message Secret { } message ExtensionStatus { - bool ready = 1; - bool readOnly = 2; - string version = 3; - string message = 4; + bool ready = 1; + bool readOnly = 2; + string version = 3; + string message = 4; } message PProfRequest { - string name = 1; + string name = 1; } message PProfData { - bytes data = 1; + bytes data = 1; } message Empty { diff --git a/pkg/server/server.swagger.json b/pkg/server/server.swagger.json index 3e997fc98..e370a9c1a 100644 --- a/pkg/server/server.swagger.json +++ b/pkg/server/server.swagger.json @@ -500,9 +500,77 @@ "tags": [ "Runner" ] - }, - "put": { - "operationId": "Runner_UpdateSecret", + } + }, + "/server.Runner/GetHistorySuites": { + "post": { + "summary": "history test related", + "operationId": "Runner_GetHistorySuites", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/serverHistorySuites" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/serverEmpty" + } + } + ], + "tags": [ + "Runner" + ] + } + }, + "/server.Runner/GetHistoryTestCase": { + "post": { + "operationId": "Runner_GetHistoryTestCase", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/serverHistoryTestResult" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/serverHistoryTestCase" + } + } + ], + "tags": [ + "Runner" + ] + } + }, + "/server.Runner/GetSecrets": { + "post": { + "summary": "secret related interfaces", + "operationId": "Runner_GetSecrets", "responses": { "200": { "description": "A successful response.", @@ -1656,6 +1724,114 @@ } } }, + "serverHistoryCaseIdentity": { + "type": "object", + "properties": { + "suite": { + "type": "string" + }, + "testcase": { + "type": "string" + }, + "historySuiteName": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "ID": { + "type": "string" + } + } + }, + "serverHistoryItems": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/serverHistoryCaseIdentity" + } + } + } + }, + "serverHistorySuites": { + "type": "object", + "properties": { + "data": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/serverHistoryItems" + } + } + } + }, + "serverHistoryTestCase": { + "type": "object", + "properties": { + "caseName": { + "type": "string" + }, + "suiteName": { + "type": "string" + }, + "historySuiteName": { + "type": "string" + }, + "createTime": { + "type": "string", + "format": "date-time" + }, + "suiteParam": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/serverPair" + } + }, + "suiteSpec": { + "$ref": "#/definitions/serverAPISpec" + }, + "suiteApi": { + "type": "string" + }, + "request": { + "$ref": "#/definitions/serverRequest" + }, + "response": { + "$ref": "#/definitions/serverResponse" + }, + "ID": { + "type": "string" + } + } + }, + "serverHistoryTestResult": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "error": { + "type": "string" + }, + "testCaseResult": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/serverTestCaseResult" + } + }, + "data": { + "$ref": "#/definitions/serverHistoryTestCase" + }, + "createTime": { + "type": "string", + "format": "date-time" + } + } + }, "serverItems": { "type": "object", "properties": { diff --git a/pkg/server/server_grpc.pb.go b/pkg/server/server_grpc.pb.go index 2cb5ad4ee..0507ee0e2 100644 --- a/pkg/server/server_grpc.pb.go +++ b/pkg/server/server_grpc.pb.go @@ -44,6 +44,11 @@ type RunnerClient interface { DeleteTestCase(ctx context.Context, in *TestCaseIdentity, opts ...grpc.CallOption) (*HelloReply, error) DuplicateTestCase(ctx context.Context, in *TestCaseDuplicate, opts ...grpc.CallOption) (*HelloReply, error) GetSuggestedAPIs(ctx context.Context, in *TestSuiteIdentity, opts ...grpc.CallOption) (*TestCases, error) + + // history test related + GetHistorySuites(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*HistorySuites, error) + GetHistoryTestCase(ctx context.Context, in *HistoryTestCase, opts ...grpc.CallOption) (*HistoryTestResult, error) + // code generator ListCodeGenerator(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*SimpleList, error) GenerateCode(ctx context.Context, in *CodeGenerateRequest, opts ...grpc.CallOption) (*CommonResult, error) @@ -246,6 +251,24 @@ func (c *runnerClient) DeleteTestCase(ctx context.Context, in *TestCaseIdentity, return out, nil } +func (c *runnerClient) GetHistorySuites(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*HistorySuites, error) { + out := new(HistorySuites) + err := c.cc.Invoke(ctx, "/server.Runner/GetHistorySuites", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runnerClient) GetHistoryTestCase(ctx context.Context, in *HistoryTestCase, opts ...grpc.CallOption) (*HistoryTestResult, error) { + out := new(HistoryTestResult) + err := c.cc.Invoke(ctx, "/server.Runner/GetHistoryTestCase", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *runnerClient) DuplicateTestCase(ctx context.Context, in *TestCaseDuplicate, opts ...grpc.CallOption) (*HelloReply, error) { out := new(HelloReply) err := c.cc.Invoke(ctx, "/server.Runner/DuplicateTestCase", in, out, opts...) @@ -492,6 +515,11 @@ type RunnerServer interface { DeleteTestCase(context.Context, *TestCaseIdentity) (*HelloReply, error) DuplicateTestCase(context.Context, *TestCaseDuplicate) (*HelloReply, error) GetSuggestedAPIs(context.Context, *TestSuiteIdentity) (*TestCases, error) + + // history test related + GetHistorySuites(context.Context, *Empty) (*HistorySuites, error) + GetHistoryTestCase(context.Context, *HistoryTestCase) (*HistoryTestResult, error) + // code generator ListCodeGenerator(context.Context, *Empty) (*SimpleList, error) GenerateCode(context.Context, *CodeGenerateRequest) (*CommonResult, error) @@ -573,6 +601,12 @@ func (UnimplementedRunnerServer) UpdateTestCase(context.Context, *TestCaseWithSu func (UnimplementedRunnerServer) DeleteTestCase(context.Context, *TestCaseIdentity) (*HelloReply, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteTestCase not implemented") } +func (UnimplementedRunnerServer) GetHistorySuites(context.Context, *Empty) (*HistorySuites, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetHistorySuites not implemented") +} +func (UnimplementedRunnerServer) GetHistoryTestCase(context.Context, *HistoryTestCase) (*HistoryTestResult, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetHistoryTestCase not implemented") +} func (UnimplementedRunnerServer) DuplicateTestCase(context.Context, *TestCaseDuplicate) (*HelloReply, error) { return nil, status.Errorf(codes.Unimplemented, "method DuplicateTestCase not implemented") } @@ -948,6 +982,42 @@ func _Runner_DeleteTestCase_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } +func _Runner_GetHistorySuites_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RunnerServer).GetHistorySuites(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/server.Runner/GetHistorySuites", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RunnerServer).GetHistorySuites(ctx, req.(*Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _Runner_GetHistoryTestCase_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(HistoryTestCase) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RunnerServer).GetHistoryTestCase(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/server.Runner/GetHistoryTestCase", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RunnerServer).GetHistoryTestCase(ctx, req.(*HistoryTestCase)) + } + return interceptor(ctx, in, info, handler) +} + func _Runner_DuplicateTestCase_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(TestCaseDuplicate) if err := dec(in); err != nil { @@ -1419,6 +1489,14 @@ var Runner_ServiceDesc = grpc.ServiceDesc{ MethodName: "DeleteTestCase", Handler: _Runner_DeleteTestCase_Handler, }, + { + MethodName: "GetHistorySuites", + Handler: _Runner_GetHistorySuites_Handler, + }, + { + MethodName: "GetHistoryTestCase", + Handler: _Runner_GetHistoryTestCase_Handler, + }, { MethodName: "DuplicateTestCase", Handler: _Runner_DuplicateTestCase_Handler, diff --git a/pkg/testing/case.go b/pkg/testing/case.go index aaecc9bb7..9ca251fc9 100644 --- a/pkg/testing/case.go +++ b/pkg/testing/case.go @@ -18,6 +18,7 @@ package testing import ( "encoding/json" "sort" + "time" "gopkg.in/yaml.v3" ) @@ -39,6 +40,31 @@ type APISpec struct { Metric *Metric `yaml:"metric,omitempty" json:"metric,omitempty"` } +type HistoryTestSuite struct { + HistorySuiteName string `yaml:"name,omitempty" json:"name,omitempty"` + Items []HistoryTestCase `yaml:"items,omitempty" json:"items,omitempty"` +} + +type HistoryTestCase struct { + ID string `yaml:"id,omitempty" json:"id,omitempty"` + CaseName string `yaml:"caseName,omitempty" json:"name,omitempty"` + SuiteName string `yaml:"suiteName,omitempty" json:"suiteName,omitempty"` + HistorySuiteName string `yaml:"historySuiteName,omitempty" json:"historySuiteName,omitempty"` + CreateTime time.Time `yaml:"createTime,omitempty" json:"createTime,omitempty"` + SuiteAPI string `yaml:"api,omitempty" json:"api,omitempty"` + SuiteSpec APISpec `yaml:"spec,omitempty" json:"spec,omitempty"` + SuiteParam map[string]string `yaml:"param,omitempty" json:"param,omitempty"` + Data TestCase `yaml:"data,omitempty" json:"data,omitempty"` +} + +type HistoryTestResult struct { + Message string `yaml:"message,omitempty" json:"message,omitempty"` + Error string `yaml:"error,omitempty" json:"error,omitempty"` + TestCaseResult []TestCaseResult `yaml:"testCaseResult,omitempty" json:"testCaseResult,omitempty"` + Data HistoryTestCase `yaml:"data,omitempty" json:"data,omitempty"` + CreateTime time.Time `yaml:"createTime,omitempty" json:"createTime,omitempty"` +} + type RPCDesc struct { ImportPath []string `yaml:"import,omitempty" json:"import,omitempty"` ServerReflection bool `yaml:"serverReflection,omitempty" json:"serverReflection,omitempty"` @@ -234,3 +260,18 @@ type Verifier struct { MaxLength int `yaml:"maxLength"` MinLength int `yaml:"minLength"` } + +type TestResult struct { + Message string `yaml:"message,omitempty" json:"message,omitempty"` + Error string `yaml:"error,omitempty" json:"error,omitempty"` + TestCaseResult []*TestCaseResult `yaml:"testCaseResult,omitempty" json:"testCaseResult,omitempty"` +} + +type TestCaseResult struct { + StatusCode int `yaml:"statusCode,omitempty" json:"statusCode,omitempty"` + Body string `yaml:"body,omitempty" json:"body,omitempty"` + Header map[string]string `yaml:"header,omitempty" json:"header,omitempty"` + Error string `yaml:"error,omitempty" json:"error,omitempty"` + Id string `yaml:"id,omitempty" json:"id,omitempty"` + Output string `yaml:"output,omitempty" json:"output,omitempty"` +} diff --git a/pkg/testing/loader.go b/pkg/testing/loader.go index 273c9bb8f..7f9da993c 100644 --- a/pkg/testing/loader.go +++ b/pkg/testing/loader.go @@ -37,6 +37,10 @@ type Writer interface { UpdateTestCase(suite string, testcase TestCase) (err error) DeleteTestCase(suite, testcase string) (err error) + ListHistoryTestSuite() (suites []HistoryTestSuite, err error) + CreateHistoryTestCase(testcaseResult TestCaseResult, suiteName *TestSuite) (err error) + GetHistoryTestCase(id string) (historyTestCase HistoryTestResult, err error) + ListTestSuite() (suites []TestSuite, err error) GetTestSuite(name string, full bool) (suite TestSuite, err error) GetTestSuiteYaml(name string) (testSuiteYaml []byte, err error) diff --git a/pkg/testing/loader_file.go b/pkg/testing/loader_file.go index cd3107f95..6813154db 100644 --- a/pkg/testing/loader_file.go +++ b/pkg/testing/loader_file.go @@ -429,6 +429,18 @@ func (l *fileLoader) DeleteTestCase(suiteName, testcase string) (err error) { return } +func (l *fileLoader) CreateHistoryTestCase(testcaseResult TestCaseResult, suiteName *TestSuite) (err error) { // always be okay + return +} + +func (l *fileLoader) ListHistoryTestSuite() (suites []HistoryTestSuite, err error) { + return +} + +func (l *fileLoader) GetHistoryTestCase(id string) (testcase HistoryTestResult, err error) { + return +} + func (l *fileLoader) Verify() (readOnly bool, err error) { // always be okay return diff --git a/pkg/testing/loader_non.go b/pkg/testing/loader_non.go index 05d768833..0544955ec 100644 --- a/pkg/testing/loader_non.go +++ b/pkg/testing/loader_non.go @@ -100,6 +100,18 @@ func (l *nonLoader) DeleteTestCase(suiteName, testcase string) (err error) { return } +func (l *nonLoader) CreateHistoryTestCase(testcaseResult TestCaseResult, suiteName *TestSuite) (err error) { + return +} + +func (l *nonLoader) ListHistoryTestSuite()(suites []HistoryTestSuite, err error) { + return +} + +func (l *nonLoader) GetHistoryTestCase(id string) (testcase HistoryTestResult, err error) { + return +} + func (l *nonLoader) Verify() (readOnly bool, err error) { // always be okay return diff --git a/pkg/testing/remote/converter.go b/pkg/testing/remote/converter.go index 0daf4f600..d3925ebf6 100644 --- a/pkg/testing/remote/converter.go +++ b/pkg/testing/remote/converter.go @@ -18,9 +18,10 @@ package remote import ( "fmt" - server "github.com/linuxsuren/api-testing/pkg/server" "github.com/linuxsuren/api-testing/pkg/testing" + "google.golang.org/protobuf/types/known/timestamppb" + "time" ) func ConvertToNormalTestSuite(suite *TestSuite) (result *testing.TestSuite) { @@ -31,8 +32,19 @@ func ConvertToNormalTestSuite(suite *TestSuite) (result *testing.TestSuite) { Spec: ConvertToNormalTestSuiteSpec(suite.Spec), } - for _, testcase := range suite.Items { - result.Items = append(result.Items, ConvertToNormalTestCase(testcase)) + for _, testCase := range suite.Items { + result.Items = append(result.Items, ConvertToNormalTestCase(testCase)) + } + return +} + +func ConvertToNormalHistoryTestSuite(suite *HistoryTestSuite) (result *testing.HistoryTestSuite) { + result = &testing.HistoryTestSuite{ + HistorySuiteName: suite.HistorySuiteName, + } + + for _, historyTestCase := range suite.Items { + result.Items = append(result.Items, ConvertToNormalHistoryTestCase(historyTestCase)) } return } @@ -126,6 +138,38 @@ func ConvertToNormalTestCase(testcase *server.TestCase) (result testing.TestCase return } +func ConvertToNormalHistoryTestCase(testcase *server.HistoryTestCase) (result testing.HistoryTestCase) { + result = testing.HistoryTestCase{ + ID: testcase.ID, + SuiteName: testcase.SuiteName, + CaseName: testcase.CaseName, + SuiteAPI: testcase.SuiteApi, + SuiteParam: pairToMap(testcase.SuiteParam), + SuiteSpec: ConvertToNormalTestSuiteSpec(testcase.SuiteSpec), + } + if testcase.Request != nil { + result.Data.Request = testing.Request{ + API: testcase.Request.Api, + Method: testcase.Request.Method, + Body: testing.NewRequestBody(testcase.Request.Body), + Header: pairToMap(testcase.Request.Header), + Query: pairToMapInter(testcase.Request.Query), + Form: pairToMap(testcase.Request.Form), + } + } + if testcase.Response != nil { + result.Data.Expect = testing.Response{ + Body: testcase.Response.Body, + StatusCode: int(testcase.Response.StatusCode), + Schema: testcase.Response.Schema, + Verify: testcase.Response.Verify, + Header: pairToMap(testcase.Response.Header), + BodyFieldsExpect: pairToInterMap(testcase.Response.BodyFieldsExpect), + } + } + return +} + func ConvertToGRPCTestCase(testcase testing.TestCase) (result *server.TestCase) { result = &server.TestCase{ Name: testcase.Name, @@ -149,6 +193,35 @@ func ConvertToGRPCTestCase(testcase testing.TestCase) (result *server.TestCase) return } +func ConvertToGRPCHistoryTestCase(testcase testing.TestCase, suite *testing.TestSuite) (result *server.HistoryTestCase) { + result = &server.HistoryTestCase{ + CaseName: testcase.Name, + SuiteName: suite.Name, + SuiteApi: suite.API, + SuiteParam: mapToPair(suite.Param), + + Request: &server.Request{ + Api: testcase.Request.API, + Method: testcase.Request.Method, + Body: testcase.Request.Body.String(), + Header: mapToPair(testcase.Request.Header), + Query: mapInterToPair(testcase.Request.Query), + Form: mapToPair(testcase.Request.Form), + }, + + Response: &server.Response{ + Body: testcase.Expect.Body, + StatusCode: int32(testcase.Expect.StatusCode), + Schema: testcase.Expect.Schema, + Verify: testcase.Expect.Verify, + Header: mapToPair(testcase.Expect.Header), + BodyFieldsExpect: mapInterToPair(testcase.Expect.BodyFieldsExpect), + }, + } + result.SuiteSpec = server.ToGRPCTestSuiteSpec(suite.Spec) + return +} + func mapToPair(data map[string]string) (pairs []*server.Pair) { pairs = make([]*server.Pair, 0) for k, v := range data { @@ -194,3 +267,49 @@ func pairToInterMap(pairs []*server.Pair) (data map[string]interface{}) { } return } + +func ConvertToGRPCTestCaseResult(testCaseResult testing.TestCaseResult, testSuite *testing.TestSuite) (result *server.HistoryTestResult) { + result = &server.HistoryTestResult{ + Error: testCaseResult.Error, + CreateTime: timestamppb.New(time.Now()), + } + + res := &server.TestCaseResult{ + StatusCode: int32(testCaseResult.StatusCode), + Body: testCaseResult.Body, + Header: mapToPair(testCaseResult.Header), + Error: testCaseResult.Error, + Id: testCaseResult.Id, + Output: testCaseResult.Output, + } + result.TestCaseResult = append(result.TestCaseResult, res) + + for _, testCase := range testSuite.Items { + result.Data = ConvertToGRPCHistoryTestCase(testCase, testSuite) + } + + return result +} + +func ConvertToNormalTestCaseResult(testResult *server.HistoryTestResult) (result testing.HistoryTestResult) { + result = testing.HistoryTestResult{ + Message: testResult.Message, + Error: testResult.Error, + CreateTime: testResult.CreateTime.AsTime(), + } + + for _, testCaseResult := range testResult.TestCaseResult { + testCaseResult := testing.TestCaseResult{ + StatusCode: int(testCaseResult.StatusCode), + Body: testCaseResult.Body, + Header: pairToMap(testCaseResult.Header), + Error: testCaseResult.Error, + Id: testCaseResult.Id, + Output: testCaseResult.Output, + } + result.TestCaseResult = append(result.TestCaseResult, testCaseResult) + } + result.Data = ConvertToNormalHistoryTestCase(testResult.Data) + + return result +} diff --git a/pkg/testing/remote/grpc_store.go b/pkg/testing/remote/grpc_store.go index 94f7d1b4f..9cb33a5eb 100644 --- a/pkg/testing/remote/grpc_store.go +++ b/pkg/testing/remote/grpc_store.go @@ -119,6 +119,17 @@ func (g *gRPCLoader) GetTestCase(suite, name string) (testcase testing.TestCase, return } +func (g *gRPCLoader) GetHistoryTestCase(id string) (result testing.HistoryTestResult, err error) { + var historyTestResult *server.HistoryTestResult + historyTestResult, err = g.client.GetHistoryTestCase(g.ctx, &server.HistoryTestCase{ + ID: id, + }) + if err == nil && historyTestResult != nil { + result = ConvertToNormalTestCaseResult(historyTestResult) + } + return +} + func (g *gRPCLoader) CreateTestCase(suite string, testcase testing.TestCase) (err error) { payload := ConvertToGRPCTestCase(testcase) payload.SuiteName = suite @@ -141,6 +152,23 @@ func (g *gRPCLoader) DeleteTestCase(suite, testcase string) (err error) { return } +func (g *gRPCLoader) CreateHistoryTestCase(testcaseResult testing.TestCaseResult, testSuite *testing.TestSuite) (err error) { + payload := ConvertToGRPCTestCaseResult(testcaseResult, testSuite) + _, err = g.client.CreateTestCaseHistory(g.ctx, payload) + return +} + +func (g *gRPCLoader) ListHistoryTestSuite() (suites []testing.HistoryTestSuite, err error) { + var items *HistoryTestSuites + items, err = g.client.ListHistoryTestSuite(g.ctx, &server.Empty{}) + if err == nil && items != nil { + for _, item := range items.Data { + suites = append(suites, *ConvertToNormalHistoryTestSuite(item)) + } + } + return +} + func (g *gRPCLoader) ListTestSuite() (suites []testing.TestSuite, err error) { var items *TestSuites items, err = g.client.ListTestSuite(g.ctx, &server.Empty{}) diff --git a/pkg/testing/remote/loader.pb.go b/pkg/testing/remote/loader.pb.go index 09d1e63ea..7dbecf54f 100644 --- a/pkg/testing/remote/loader.pb.go +++ b/pkg/testing/remote/loader.pb.go @@ -155,116 +155,6 @@ func (x *TestSuite) GetFull() bool { return false } -type Configs struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Data []*Config `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` -} - -func (x *Configs) Reset() { - *x = Configs{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_testing_remote_loader_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Configs) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Configs) ProtoMessage() {} - -func (x *Configs) ProtoReflect() protoreflect.Message { - mi := &file_pkg_testing_remote_loader_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Configs.ProtoReflect.Descriptor instead. -func (*Configs) Descriptor() ([]byte, []int) { - return file_pkg_testing_remote_loader_proto_rawDescGZIP(), []int{2} -} - -func (x *Configs) GetData() []*Config { - if x != nil { - return x.Data - } - return nil -} - -type Config struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` -} - -func (x *Config) Reset() { - *x = Config{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_testing_remote_loader_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Config) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Config) ProtoMessage() {} - -func (x *Config) ProtoReflect() protoreflect.Message { - mi := &file_pkg_testing_remote_loader_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Config.ProtoReflect.Descriptor instead. -func (*Config) Descriptor() ([]byte, []int) { - return file_pkg_testing_remote_loader_proto_rawDescGZIP(), []int{3} -} - -func (x *Config) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Config) GetValue() string { - if x != nil { - return x.Value - } - return "" -} - -func (x *Config) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - var File_pkg_testing_remote_loader_proto protoreflect.FileDescriptor var file_pkg_testing_remote_loader_proto_rawDesc = []byte{ @@ -287,99 +177,70 @@ var file_pkg_testing_remote_loader_proto_rawDesc = []byte{ 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x75, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x75, 0x6c, 0x6c, - 0x22, 0x2d, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x54, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0xc7, 0x05, 0x0a, 0x06, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x72, - 0x12, 0x34, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, - 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x12, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, - 0x69, 0x74, 0x65, 0x73, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x0d, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x36, 0x0a, - 0x0c, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, 0x2e, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, - 0x1a, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, - 0x69, 0x74, 0x65, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x32, 0x97, 0x05, 0x0a, 0x06, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x0d, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x0d, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x22, + 0x00, 0x12, 0x35, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, + 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, + 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x22, 0x00, - 0x12, 0x35, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, + 0x12, 0x39, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, - 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x73, 0x12, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x11, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x73, 0x22, 0x00, - 0x12, 0x33, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, - 0x73, 0x65, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, - 0x43, 0x61, 0x73, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, - 0x43, 0x61, 0x73, 0x65, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, - 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x10, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x10, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x33, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, - 0x43, 0x61, 0x73, 0x65, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, - 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x06, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x79, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x05, 0x50, - 0x50, 0x72, 0x6f, 0x66, 0x12, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x50, - 0x72, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x32, - 0x96, 0x02, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x0e, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x00, - 0x12, 0x2e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x0d, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x00, - 0x12, 0x36, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, - 0x12, 0x36, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x32, 0x9e, 0x02, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x0a, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x09, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x0e, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x00, 0x12, 0x36, 0x0a, - 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x2e, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x14, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x3a, 0x0a, - 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x73, 0x75, 0x72, - 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2d, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x70, - 0x6b, 0x67, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, + 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x0f, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, + 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, + 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, + 0x73, 0x65, 0x73, 0x12, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, + 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x73, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x0e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x10, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, + 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, + 0x12, 0x33, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, + 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, + 0x65, 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, + 0x61, 0x73, 0x65, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x22, 0x00, 0x12, 0x33, 0x0a, + 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, + 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, + 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x00, 0x12, 0x32, 0x0a, 0x06, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x0d, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x05, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x12, + 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, + 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x32, 0x96, 0x02, 0x0a, 0x0d, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2d, 0x0a, 0x09, + 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x0a, 0x47, + 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x22, 0x00, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x73, 0x75, 0x72, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, + 0x2d, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -398,79 +259,62 @@ var file_pkg_testing_remote_loader_proto_msgTypes = make([]protoimpl.MessageInfo var file_pkg_testing_remote_loader_proto_goTypes = []interface{}{ (*TestSuites)(nil), // 0: remote.TestSuites (*TestSuite)(nil), // 1: remote.TestSuite - (*Configs)(nil), // 2: remote.Configs - (*Config)(nil), // 3: remote.Config - (*server.Pair)(nil), // 4: server.Pair - (*server.APISpec)(nil), // 5: server.APISpec - (*server.TestCase)(nil), // 6: server.TestCase - (*server.Empty)(nil), // 7: server.Empty - (*server.PProfRequest)(nil), // 8: server.PProfRequest - (*server.Secret)(nil), // 9: server.Secret - (*server.SimpleName)(nil), // 10: server.SimpleName - (*server.TestCases)(nil), // 11: server.TestCases - (*server.Version)(nil), // 12: server.Version - (*server.ExtensionStatus)(nil), // 13: server.ExtensionStatus - (*server.PProfData)(nil), // 14: server.PProfData - (*server.Secrets)(nil), // 15: server.Secrets - (*server.CommonResult)(nil), // 16: server.CommonResult + (*server.Pair)(nil), // 2: server.Pair + (*server.APISpec)(nil), // 3: server.APISpec + (*server.TestCase)(nil), // 4: server.TestCase + (*server.Empty)(nil), // 5: server.Empty + (*server.PProfRequest)(nil), // 6: server.PProfRequest + (*server.Secret)(nil), // 7: server.Secret + (*server.TestCases)(nil), // 8: server.TestCases + (*server.ExtensionStatus)(nil), // 9: server.ExtensionStatus + (*server.PProfData)(nil), // 10: server.PProfData + (*server.Secrets)(nil), // 11: server.Secrets + (*server.CommonResult)(nil), // 12: server.CommonResult } var file_pkg_testing_remote_loader_proto_depIdxs = []int32{ 1, // 0: remote.TestSuites.data:type_name -> remote.TestSuite - 4, // 1: remote.TestSuite.param:type_name -> server.Pair - 5, // 2: remote.TestSuite.spec:type_name -> server.APISpec - 6, // 3: remote.TestSuite.items:type_name -> server.TestCase - 3, // 4: remote.Configs.data:type_name -> remote.Config - 7, // 5: remote.Loader.ListTestSuite:input_type -> server.Empty - 1, // 6: remote.Loader.CreateTestSuite:input_type -> remote.TestSuite - 1, // 7: remote.Loader.GetTestSuite:input_type -> remote.TestSuite - 1, // 8: remote.Loader.UpdateTestSuite:input_type -> remote.TestSuite - 1, // 9: remote.Loader.DeleteTestSuite:input_type -> remote.TestSuite - 1, // 10: remote.Loader.ListTestCases:input_type -> remote.TestSuite - 6, // 11: remote.Loader.CreateTestCase:input_type -> server.TestCase - 6, // 12: remote.Loader.GetTestCase:input_type -> server.TestCase - 6, // 13: remote.Loader.UpdateTestCase:input_type -> server.TestCase - 6, // 14: remote.Loader.DeleteTestCase:input_type -> server.TestCase - 7, // 15: remote.Loader.GetVersion:input_type -> server.Empty - 7, // 16: remote.Loader.Verify:input_type -> server.Empty - 8, // 17: remote.Loader.PProf:input_type -> server.PProfRequest - 9, // 18: remote.SecretService.GetSecret:input_type -> server.Secret - 7, // 19: remote.SecretService.GetSecrets:input_type -> server.Empty - 9, // 20: remote.SecretService.CreateSecret:input_type -> server.Secret - 9, // 21: remote.SecretService.DeleteSecret:input_type -> server.Secret - 9, // 22: remote.SecretService.UpdateSecret:input_type -> server.Secret - 7, // 23: remote.ConfigService.GetConfigs:input_type -> server.Empty - 10, // 24: remote.ConfigService.GetConfig:input_type -> server.SimpleName - 3, // 25: remote.ConfigService.CreateConfig:input_type -> remote.Config - 3, // 26: remote.ConfigService.UpdateConfig:input_type -> remote.Config - 10, // 27: remote.ConfigService.DeleteConfig:input_type -> server.SimpleName - 0, // 28: remote.Loader.ListTestSuite:output_type -> remote.TestSuites - 7, // 29: remote.Loader.CreateTestSuite:output_type -> server.Empty - 1, // 30: remote.Loader.GetTestSuite:output_type -> remote.TestSuite - 1, // 31: remote.Loader.UpdateTestSuite:output_type -> remote.TestSuite - 7, // 32: remote.Loader.DeleteTestSuite:output_type -> server.Empty - 11, // 33: remote.Loader.ListTestCases:output_type -> server.TestCases - 7, // 34: remote.Loader.CreateTestCase:output_type -> server.Empty - 6, // 35: remote.Loader.GetTestCase:output_type -> server.TestCase - 6, // 36: remote.Loader.UpdateTestCase:output_type -> server.TestCase - 7, // 37: remote.Loader.DeleteTestCase:output_type -> server.Empty - 12, // 38: remote.Loader.GetVersion:output_type -> server.Version - 13, // 39: remote.Loader.Verify:output_type -> server.ExtensionStatus - 14, // 40: remote.Loader.PProf:output_type -> server.PProfData - 9, // 41: remote.SecretService.GetSecret:output_type -> server.Secret - 15, // 42: remote.SecretService.GetSecrets:output_type -> server.Secrets - 16, // 43: remote.SecretService.CreateSecret:output_type -> server.CommonResult - 16, // 44: remote.SecretService.DeleteSecret:output_type -> server.CommonResult - 16, // 45: remote.SecretService.UpdateSecret:output_type -> server.CommonResult - 2, // 46: remote.ConfigService.GetConfigs:output_type -> remote.Configs - 3, // 47: remote.ConfigService.GetConfig:output_type -> remote.Config - 16, // 48: remote.ConfigService.CreateConfig:output_type -> server.CommonResult - 16, // 49: remote.ConfigService.UpdateConfig:output_type -> server.CommonResult - 16, // 50: remote.ConfigService.DeleteConfig:output_type -> server.CommonResult - 28, // [28:51] is the sub-list for method output_type - 5, // [5:28] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name + 2, // 1: remote.TestSuite.param:type_name -> server.Pair + 3, // 2: remote.TestSuite.spec:type_name -> server.APISpec + 4, // 3: remote.TestSuite.items:type_name -> server.TestCase + 5, // 4: remote.Loader.ListTestSuite:input_type -> server.Empty + 1, // 5: remote.Loader.CreateTestSuite:input_type -> remote.TestSuite + 1, // 6: remote.Loader.GetTestSuite:input_type -> remote.TestSuite + 1, // 7: remote.Loader.UpdateTestSuite:input_type -> remote.TestSuite + 1, // 8: remote.Loader.DeleteTestSuite:input_type -> remote.TestSuite + 1, // 9: remote.Loader.ListTestCases:input_type -> remote.TestSuite + 4, // 10: remote.Loader.CreateTestCase:input_type -> server.TestCase + 4, // 11: remote.Loader.GetTestCase:input_type -> server.TestCase + 4, // 12: remote.Loader.UpdateTestCase:input_type -> server.TestCase + 4, // 13: remote.Loader.DeleteTestCase:input_type -> server.TestCase + 5, // 14: remote.Loader.Verify:input_type -> server.Empty + 6, // 15: remote.Loader.PProf:input_type -> server.PProfRequest + 7, // 16: remote.SecretService.GetSecret:input_type -> server.Secret + 5, // 17: remote.SecretService.GetSecrets:input_type -> server.Empty + 7, // 18: remote.SecretService.CreateSecret:input_type -> server.Secret + 7, // 19: remote.SecretService.DeleteSecret:input_type -> server.Secret + 7, // 20: remote.SecretService.UpdateSecret:input_type -> server.Secret + 0, // 21: remote.Loader.ListTestSuite:output_type -> remote.TestSuites + 5, // 22: remote.Loader.CreateTestSuite:output_type -> server.Empty + 1, // 23: remote.Loader.GetTestSuite:output_type -> remote.TestSuite + 1, // 24: remote.Loader.UpdateTestSuite:output_type -> remote.TestSuite + 5, // 25: remote.Loader.DeleteTestSuite:output_type -> server.Empty + 8, // 26: remote.Loader.ListTestCases:output_type -> server.TestCases + 5, // 27: remote.Loader.CreateTestCase:output_type -> server.Empty + 4, // 28: remote.Loader.GetTestCase:output_type -> server.TestCase + 4, // 29: remote.Loader.UpdateTestCase:output_type -> server.TestCase + 5, // 30: remote.Loader.DeleteTestCase:output_type -> server.Empty + 9, // 31: remote.Loader.Verify:output_type -> server.ExtensionStatus + 10, // 32: remote.Loader.PProf:output_type -> server.PProfData + 7, // 33: remote.SecretService.GetSecret:output_type -> server.Secret + 11, // 34: remote.SecretService.GetSecrets:output_type -> server.Secrets + 12, // 35: remote.SecretService.CreateSecret:output_type -> server.CommonResult + 12, // 36: remote.SecretService.DeleteSecret:output_type -> server.CommonResult + 12, // 37: remote.SecretService.UpdateSecret:output_type -> server.CommonResult + 21, // [21:38] is the sub-list for method output_type + 4, // [4:21] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name } func init() { file_pkg_testing_remote_loader_proto_init() } @@ -503,30 +347,6 @@ func file_pkg_testing_remote_loader_proto_init() { return nil } } - file_pkg_testing_remote_loader_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Configs); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_testing_remote_loader_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Config); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } } type x struct{} out := protoimpl.TypeBuilder{ diff --git a/pkg/testing/remote/loader.proto b/pkg/testing/remote/loader.proto index a0827f535..93bcd1352 100644 --- a/pkg/testing/remote/loader.proto +++ b/pkg/testing/remote/loader.proto @@ -19,6 +19,14 @@ service Loader { rpc UpdateTestCase(server.TestCase) returns (server.TestCase) {} rpc DeleteTestCase(server.TestCase) returns (server.Empty) {} + rpc ListHistoryTestSuite(server.Empty) returns (HistoryTestSuites) {} + rpc CreateTestCaseHistory(server.HistoryTestResult) returns (server.Empty) {} + rpc GetHistoryTestCase(server.HistoryTestCase) returns (server.HistoryTestResult) {} + + rpc ListHistoryTestSuite(server.Empty) returns (HistoryTestSuites) {} + rpc CreateTestCaseHistory(server.HistoryTestResult) returns (server.Empty) {} + rpc GetHistoryTestCase(server.HistoryTestCase) returns (server.HistoryTestResult) {} + rpc GetVersion(server.Empty) returns (server.Version) {} rpc Verify(server.Empty) returns (server.ExtensionStatus) {} rpc PProf(server.PProfRequest) returns (server.PProfData) {} @@ -37,6 +45,15 @@ message TestSuite { bool full = 6; } +message HistoryTestSuites { + repeated HistoryTestSuite data = 1; +} + +message HistoryTestSuite { + string historySuiteName = 1; + repeated server.HistoryTestCase items =2; +} + service SecretService { rpc GetSecret(server.Secret) returns (server.Secret) {} rpc GetSecrets(server.Empty) returns (server.Secrets) {} diff --git a/pkg/testing/remote/loader_grpc.pb.go b/pkg/testing/remote/loader_grpc.pb.go index 907079cbf..d6edbec44 100644 --- a/pkg/testing/remote/loader_grpc.pb.go +++ b/pkg/testing/remote/loader_grpc.pb.go @@ -33,6 +33,9 @@ type LoaderClient interface { GetTestCase(ctx context.Context, in *server.TestCase, opts ...grpc.CallOption) (*server.TestCase, error) UpdateTestCase(ctx context.Context, in *server.TestCase, opts ...grpc.CallOption) (*server.TestCase, error) DeleteTestCase(ctx context.Context, in *server.TestCase, opts ...grpc.CallOption) (*server.Empty, error) + ListHistoryTestSuite(ctx context.Context, in *server.Empty, opts ...grpc.CallOption) (*HistoryTestSuites, error) + CreateTestCaseHistory(ctx context.Context, in *server.HistoryTestResult, opts ...grpc.CallOption) (*server.Empty, error) + GetHistoryTestCase(ctx context.Context, in *server.HistoryTestCase, opts ...grpc.CallOption) (*server.HistoryTestResult, error) GetVersion(ctx context.Context, in *server.Empty, opts ...grpc.CallOption) (*server.Version, error) Verify(ctx context.Context, in *server.Empty, opts ...grpc.CallOption) (*server.ExtensionStatus, error) PProf(ctx context.Context, in *server.PProfRequest, opts ...grpc.CallOption) (*server.PProfData, error) @@ -136,15 +139,6 @@ func (c *loaderClient) DeleteTestCase(ctx context.Context, in *server.TestCase, return out, nil } -func (c *loaderClient) GetVersion(ctx context.Context, in *server.Empty, opts ...grpc.CallOption) (*server.Version, error) { - out := new(server.Version) - err := c.cc.Invoke(ctx, "/remote.Loader/GetVersion", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *loaderClient) Verify(ctx context.Context, in *server.Empty, opts ...grpc.CallOption) (*server.ExtensionStatus, error) { out := new(server.ExtensionStatus) err := c.cc.Invoke(ctx, "/remote.Loader/Verify", in, out, opts...) @@ -177,7 +171,6 @@ type LoaderServer interface { GetTestCase(context.Context, *server.TestCase) (*server.TestCase, error) UpdateTestCase(context.Context, *server.TestCase) (*server.TestCase, error) DeleteTestCase(context.Context, *server.TestCase) (*server.Empty, error) - GetVersion(context.Context, *server.Empty) (*server.Version, error) Verify(context.Context, *server.Empty) (*server.ExtensionStatus, error) PProf(context.Context, *server.PProfRequest) (*server.PProfData, error) mustEmbedUnimplementedLoaderServer() @@ -217,9 +210,6 @@ func (UnimplementedLoaderServer) UpdateTestCase(context.Context, *server.TestCas func (UnimplementedLoaderServer) DeleteTestCase(context.Context, *server.TestCase) (*server.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteTestCase not implemented") } -func (UnimplementedLoaderServer) GetVersion(context.Context, *server.Empty) (*server.Version, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetVersion not implemented") -} func (UnimplementedLoaderServer) Verify(context.Context, *server.Empty) (*server.ExtensionStatus, error) { return nil, status.Errorf(codes.Unimplemented, "method Verify not implemented") } @@ -419,24 +409,6 @@ func _Loader_DeleteTestCase_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } -func _Loader_GetVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(server.Empty) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(LoaderServer).GetVersion(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/remote.Loader/GetVersion", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(LoaderServer).GetVersion(ctx, req.(*server.Empty)) - } - return interceptor(ctx, in, info, handler) -} - func _Loader_Verify_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(server.Empty) if err := dec(in); err != nil { @@ -520,10 +492,6 @@ var Loader_ServiceDesc = grpc.ServiceDesc{ MethodName: "DeleteTestCase", Handler: _Loader_DeleteTestCase_Handler, }, - { - MethodName: "GetVersion", - Handler: _Loader_GetVersion_Handler, - }, { MethodName: "Verify", Handler: _Loader_Verify_Handler, From 35fdb40da892e63febc01b5297f3fb8eb1e595fe Mon Sep 17 00:00:00 2001 From: ysf <1807100869@qq.com> Date: Sun, 4 Aug 2024 21:03:54 +0800 Subject: [PATCH 02/15] feat: add history delete --- console/atest-ui/src/locales/en.json | 3 +- console/atest-ui/src/locales/zh.json | 3 +- console/atest-ui/src/views/TestCase.vue | 109 +++-- console/atest-ui/src/views/net.ts | 60 ++- pkg/server/convert.go | 31 ++ pkg/server/remote_server.go | 26 +- pkg/server/server.pb.go | 531 ++++++++++++++---------- pkg/server/server.pb.gw.go | 227 +++++++++- pkg/server/server.proto | 5 +- pkg/server/server.swagger.json | 98 ++++- pkg/server/server_grpc.pb.go | 80 +--- pkg/testing/loader.go | 4 +- pkg/testing/loader_file.go | 10 +- pkg/testing/loader_non.go | 9 +- pkg/testing/remote/converter.go | 49 ++- pkg/testing/remote/grpc_store.go | 22 +- pkg/testing/remote/loader.pb.go | 240 ++++++----- pkg/testing/remote/loader.proto | 4 +- pkg/testing/remote/loader_grpc.pb.go | 109 ++++- 19 files changed, 1150 insertions(+), 470 deletions(-) diff --git a/console/atest-ui/src/locales/en.json b/console/atest-ui/src/locales/en.json index cddcf2b05..edd55174d 100644 --- a/console/atest-ui/src/locales/en.json +++ b/console/atest-ui/src/locales/en.json @@ -50,7 +50,8 @@ "filter": "Filter Keyword", "noParameter": "No Parameter", "testsuite": "Test Suite:", - "apiAddress": "API Address:" + "apiAddress": "API Address:", + "runningAt": "Running At:" }, "field": { "name": "Name", diff --git a/console/atest-ui/src/locales/zh.json b/console/atest-ui/src/locales/zh.json index 6d28095ab..93e7a6557 100644 --- a/console/atest-ui/src/locales/zh.json +++ b/console/atest-ui/src/locales/zh.json @@ -45,7 +45,8 @@ "filter": "过滤", "noParameter": "无参数", "testsuite": "测试集:", - "apiAddress": "API 地址:" + "apiAddress": "API 地址:", + "runningAt": "运行于:" }, "field": { "name": "名称", diff --git a/console/atest-ui/src/views/TestCase.vue b/console/atest-ui/src/views/TestCase.vue index c2b3503aa..e94a8420d 100644 --- a/console/atest-ui/src/views/TestCase.vue +++ b/console/atest-ui/src/views/TestCase.vue @@ -50,7 +50,6 @@ const runTestCase = () => { requestLoading.value = true const name = props.name const suite = props.suite - API.RunTestCase({ suiteName: suite, name: name, @@ -63,7 +62,6 @@ const runTestCase = () => { requestLoading.value = false UIAPI.ErrorTip(e) - parseResponseBody(e.body) }) } @@ -84,18 +82,14 @@ const parseResponseBody = (body) => { const handleTestResult = (e) => { testResult.value = e; - if (e.error !== '') { - ElMessage({ - message: e.error, - type: 'error' - }) - } else { - ElMessage({ - message: 'Pass!', - type: 'success' - }) - } - parseResponseBody(e.body) + if (!isHistoryTestCase.value) { + handleTestResultError(e) + } + + if (e.body !== '') { + testResult.value.bodyObject = JSON.parse(e.body); + testResult.value.originBodyObject = JSON.parse(e.body); + } Cache.SetTestCaseResponseCache(suite + '-' + name, { body: testResult.value.bodyObject, @@ -103,7 +97,21 @@ const handleTestResult = (e) => { statusCode: testResult.value.statusCode } as TestCaseResponse) - parameters.value = [] + parameters.value = []; +} + +const handleTestResultError = (e) => { + if (e.error !== '') { + ElMessage({ + message: e.error, + type: 'error' + }); + } else { + ElMessage({ + message: 'Pass!', + type: 'success' + }); + } } const responseBodyFilterText = ref('') @@ -213,6 +221,7 @@ let suite let historySuiteName let historyCaseID const isHistoryTestCase = ref(false) +const HistoryTestCaseCreateTime = ref('') function load() { name = props.name @@ -238,11 +247,12 @@ function load() { if (historySuiteName != '' && historySuiteName != undefined) { isHistoryTestCase.value = true - API.GetHistoryTestCase({ + API.GetHistoryTestCaseWithResult({ historyCaseID : historyCaseID }, (e) => { processResponse(e.data) handleTestResult(e.testCaseResult[0]) + formatDate(e.createTime) }) } else { API.GetTestCase({ @@ -254,6 +264,22 @@ function load() { } } +function formatDate(createTimeStr : string){ + let parts = createTimeStr.split(/[T.Z]/); + let datePart = parts[0].split("-"); + let timePart = parts[1].split(":"); + + let year = datePart[0]; + let month = datePart[1]; + let day = datePart[2]; + let hours = timePart[0]; + let minutes = timePart[1]; + let seconds = timePart[2].split(".")[0]; + + let formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; + HistoryTestCaseCreateTime.value = formattedDate +} + function processResponse(e) { if (e.request.method === '') { e.request.method = 'GET' @@ -334,28 +360,40 @@ function saveTestCase(tip: boolean = true, callback: (c: any) => void) { }, UIAPI.ErrorTip, saveLoading) } -function deleteTestCase() { +function deleteCase() { const name = props.name const suite = props.suite + const historyCaseID = props.historyCaseID - API.DeleteTestCase({ - suiteName: suite, - name: name - }, (e) => { - if (e.ok) { - emit('updated', 'hello from child') + if (isHistoryTestCase.value == true){ + deleteHistoryTestCase(historyCaseID) + } else { + deleteTestCase(name, suite) + } +} - ElMessage({ - message: 'Delete.', - type: 'success' - }) +function deleteHistoryTestCase(historyCaseID : string){ + API.DeleteHistoryTestCase({ historyCaseID }, handleDeleteResponse); +} - // clean all the values - testCaseWithSuite.value = emptyTestCaseWithSuite - } else { - UIAPI.ErrorTip(e) - } - }) +function deleteTestCase(name : string, suite : string){ + API.DeleteTestCase({ suiteName: suite, name }, handleDeleteResponse); +} + +function handleDeleteResponse(e) { + if (e.ok) { + emit('updated', 'hello from child'); + + ElMessage({ + message: 'Delete.', + type: 'success' + }); + + // Clean all the values + testCaseWithSuite.value = emptyTestCaseWithSuite; + } else { + UIAPI.ErrorTip(e); + } } const codeDialogOpened = ref(false) @@ -593,9 +631,10 @@ Magic.Keys(() => { {{ t('button.save') }} - {{ t('button.delete') }} + {{ t('button.delete') }} {{ t('button.duplicate') }} {{ t('button.generateCode') }} + {{ t('tip.runningAt') }}{{ HistoryTestCaseCreateTime }}
{ diff --git a/console/atest-ui/src/views/net.ts b/console/atest-ui/src/views/net.ts index 8f1e09fca..9f4800ffb 100644 --- a/console/atest-ui/src/views/net.ts +++ b/console/atest-ui/src/views/net.ts @@ -561,6 +561,23 @@ const GetTestSuiteYaml = (suite: string, callback: (d: any) => void, errHandle?: .catch(errHandle) } +function GetHistoryTestCaseWithResult(req: HistoryTestCase, + callback: (d: any) => void, errHandle?: (e: any) => void | null) { + const requestOptions = { + method: 'POST', + headers: { + 'X-Store-Name': Cache.GetCurrentStore().name, + 'X-Auth': getToken() + }, + body: JSON.stringify({ + ID : req.historyCaseID + }) + } + fetch('/server.Runner/GetHistoryTestCaseWithResult', requestOptions) + .then(DefaultResponseProcess) + .then(callback).catch(errHandle) +} + function GetHistoryTestCase(req: HistoryTestCase, callback: (d: any) => void, errHandle?: (e: any) => void | null) { const requestOptions = { @@ -578,19 +595,34 @@ function GetHistoryTestCase(req: HistoryTestCase, .then(callback).catch(errHandle) } +function DeleteHistoryTestCase(req: HistoryTestCase, + callback: (d: any) => void, errHandle?: (e: any) => void | null) { + const requestOptions = { + method: 'POST', + headers: { + 'X-Store-Name': Cache.GetCurrentStore().name, + 'X-Auth': getToken() + }, + body: JSON.stringify({ + ID : req.historyCaseID + }) + } + fetch('/server.Runner/DeleteHistoryTestCase', requestOptions) + .then(callback).catch(errHandle) +} + export const API = { - DefaultResponseProcess, - GetVersion, - CreateTestSuite, UpdateTestSuite, ImportTestSuite, GetTestSuite, DeleteTestSuite, ConvertTestSuite, GetTestSuiteYaml, - DuplicateTestSuite, - CreateTestCase, UpdateTestCase, GetTestCase, ListTestCase, DeleteTestCase, RunTestCase, DuplicateTestCase, - GetHistoryTestCase, - GenerateCode, ListCodeGenerator, - PopularHeaders, - CreateOrUpdateStore, GetStores, DeleteStore, VerifyStore, - FunctionsQuery, - GetSecrets, DeleteSecret, CreateOrUpdateSecret, - GetSuggestedAPIs, - ReloadMockServer, GetMockConfig, - getToken + DefaultResponseProcess, + GetVersion, + CreateTestSuite, UpdateTestSuite, ImportTestSuite, GetTestSuite, DeleteTestSuite, ConvertTestSuite,GetTestSuiteYaml, + CreateTestCase, UpdateTestCase, GetTestCase, ListTestCase, DeleteTestCase, RunTestCase, + GetHistoryTestCaseWithResult, DeleteHistoryTestCase,GetHistoryTestCase, + GenerateCode, ListCodeGenerator, + PopularHeaders, + CreateOrUpdateStore, GetStores, DeleteStore, VerifyStore, + FunctionsQuery, + GetSecrets, DeleteSecret, CreateOrUpdateSecret, + GetSuggestedAPIs, + ReloadMockServer, GetMockConfig, + getToken } diff --git a/pkg/server/convert.go b/pkg/server/convert.go index be1fd5ef5..137179710 100644 --- a/pkg/server/convert.go +++ b/pkg/server/convert.go @@ -65,6 +65,37 @@ func ToNormalStore(store *Store) (result testing.Store) { return } +func ConvertToGRPCHistoryTestCase(historyTestcase testing.HistoryTestCase) (result *HistoryTestCase) { + req := historyTestcase.Data.Request + res := historyTestcase.Data.Expect + result = &HistoryTestCase{ + CaseName: historyTestcase.CaseName, + SuiteName: historyTestcase.SuiteName, + SuiteApi: historyTestcase.SuiteAPI, + SuiteParam: mapToPair(historyTestcase.SuiteParam), + + Request: &Request{ + Api: req.API, + Method: req.Method, + Body: req.Body.String(), + Header: mapToPair(req.Header), + Query: mapInterToPair(req.Query), + Form: mapToPair(req.Form), + }, + + Response: &Response{ + Body: res.Body, + StatusCode: int32(res.StatusCode), + Schema: res.Schema, + Verify: res.Verify, + Header: mapToPair(res.Header), + BodyFieldsExpect: mapInterToPair(res.BodyFieldsExpect), + }, + } + result.SuiteSpec = ToGRPCTestSuiteSpec(historyTestcase.SuiteSpec) + return +} + func ToGRPCSuite(suite *testing.TestSuite) (result *TestSuite) { result = &TestSuite{ Name: suite.Name, diff --git a/pkg/server/remote_server.go b/pkg/server/remote_server.go index b06b44bb2..f62feeb65 100644 --- a/pkg/server/remote_server.go +++ b/pkg/server/remote_server.go @@ -528,16 +528,26 @@ func (s *server) GetTestCase(ctx context.Context, in *TestCaseIdentity) (reply * return } -func (s *server) GetHistoryTestCase(ctx context.Context, in *HistoryTestCase) (reply *HistoryTestResult, err error) { +func (s *server) GetHistoryTestCaseWithResult(ctx context.Context, in *HistoryTestCase) (reply *HistoryTestResult, err error) { var result testing.HistoryTestResult loader := s.getLoader(ctx) defer loader.Close() - if result, err = loader.GetHistoryTestCase(in.ID); err == nil { + if result, err = loader.GetHistoryTestCaseWithResult(in.ID); err == nil { reply = ToGRPCHistoryTestCaseResult(result) } return } +func (s *server) GetHistoryTestCase(ctx context.Context, in *HistoryTestCase) (reply *HistoryTestCase, err error) { + var result testing.HistoryTestCase + loader := s.getLoader(ctx) + defer loader.Close() + if result, err = loader.GetHistoryTestCase(in.ID); err == nil { + reply = ConvertToGRPCHistoryTestCase(result) + } + return +} + var ExecutionCountNum = promauto.NewCounter(prometheus.CounterOpts{ Name: "atest_execution_count", Help: "The total number of request execution", @@ -599,7 +609,7 @@ func (s *server) RunTestCase(ctx context.Context, in *TestCaseIdentity) (result } return } - + result = &TestCaseResult{ Output: reply.Message, Error: reply.Error, @@ -625,7 +635,7 @@ func (s *server) RunTestCase(ctx context.Context, in *TestCaseIdentity) (result result.Header = lastItem.Header result.StatusCode = lastItem.StatusCode } - + normalResult := ToNormalTestCaseResult(result) var testSuite *testing.TestSuite if testSuite, err = s.getSuiteFromTestTask(task); err != nil { @@ -733,6 +743,14 @@ func (s *server) DeleteTestCase(ctx context.Context, in *TestCaseIdentity) (repl return } +func (s *server) DeleteHistoryTestCase(ctx context.Context, in *HistoryTestCase) (reply *HelloReply, err error) { + loader := s.getLoader(ctx) + defer loader.Close() + reply = &HelloReply{} + err = loader.DeleteHistoryTestCase(in.ID) + return +} + func (s *server) DuplicateTestCase(ctx context.Context, in *TestCaseDuplicate) (reply *HelloReply, err error) { loader := s.getLoader(ctx) defer loader.Close() diff --git a/pkg/server/server.pb.go b/pkg/server/server.pb.go index a77b74880..adcf460ad 100644 --- a/pkg/server/server.pb.go +++ b/pkg/server/server.pb.go @@ -3306,41 +3306,86 @@ var file_pkg_server_server_proto_rawDesc = []byte{ 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x22, 0x0a, 0x0c, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0x1f, 0x0a, 0x09, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3c, 0x0a, 0x0a, - 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x72, - 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x32, 0x80, 0x10, 0x0a, 0x06, 0x52, - 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x2d, 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, 0x10, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x1a, 0x12, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, - 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, - 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, - 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, - 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, - 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0f, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0c, 0x47, 0x65, - 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, - 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x0f, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, - 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, - 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, - 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x59, 0x61, 0x6d, 0x6c, 0x12, 0x19, + 0x6d, 0x65, 0x22, 0x2b, 0x0a, 0x06, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0xc0, 0x02, 0x0a, 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, + 0x2c, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, + 0x72, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, + 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, + 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, + 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x22, 0x33, 0x0a, 0x0a, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x73, + 0x12, 0x25, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, + 0x64, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4b, 0x0a, 0x09, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x64, 0x22, 0x42, 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2e, 0x0a, 0x0a, 0x53, 0x69, 0x6d, 0x70, + 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, + 0x69, 0x72, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x20, 0x0a, 0x0a, 0x53, 0x69, 0x6d, 0x70, + 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6d, 0x0a, 0x13, 0x43, 0x6f, + 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x2d, 0x0a, 0x07, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x54, 0x0a, 0x06, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, + 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x77, + 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, + 0x6e, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, + 0x6e, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x22, 0x0a, 0x0c, 0x50, 0x50, 0x72, 0x6f, 0x66, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1f, 0x0a, 0x09, 0x50, + 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x07, 0x0a, 0x05, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3c, 0x0a, 0x0a, 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x32, 0x88, 0x11, 0x0a, 0x06, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x2d, + 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, + 0x65, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x2c, 0x0a, + 0x09, 0x47, 0x65, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0f, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x59, 0x61, 0x6d, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x12, 0x3a, 0x0a, @@ -3371,91 +3416,116 @@ var file_pkg_server_server_proto_rawDesc = []byte{ 0x79, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, - 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x00, 0x12, - 0x43, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, + 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x0b, 0x47, 0x65, 0x74, + 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, + 0x43, 0x61, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x53, 0x75, + 0x69, 0x74, 0x65, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, + 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x0e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, + 0x68, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x18, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3a, + 0x0a, 0x10, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x75, 0x69, 0x74, + 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x12, 0x47, 0x65, + 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, + 0x12, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x0d, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x00, + 0x12, 0x43, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x34, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x74, 0x65, 0x72, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, + 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x10, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0x00, 0x12, 0x34, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x74, 0x65, 0x72, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, - 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x10, 0x43, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1b, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x00, 0x12, 0x30, 0x0a, 0x0e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, - 0x69, 0x72, 0x73, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0d, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x00, 0x12, 0x40, 0x0a, - 0x14, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, - 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, - 0x31, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0d, 0x2e, + 0x6c, 0x74, 0x22, 0x00, 0x12, 0x30, 0x0a, 0x0e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, + 0x61, 0x69, 0x72, 0x73, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0d, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x00, 0x12, 0x40, + 0x0a, 0x14, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, + 0x12, 0x31, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0d, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x06, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x06, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x0d, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, - 0x00, 0x12, 0x34, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, - 0x64, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x4b, 0x69, 0x6e, 0x64, 0x73, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x73, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, + 0x22, 0x00, 0x12, 0x34, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, + 0x6e, 0x64, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x73, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x73, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, + 0x72, 0x65, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, - 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, - 0x00, 0x12, 0x2e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, - 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, - 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, - 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x05, 0x50, 0x50, 0x72, - 0x6f, 0x66, 0x12, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x50, 0x72, 0x6f, - 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x32, 0x4b, 0x0a, - 0x0f, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x38, 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x43, 0x61, - 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x32, 0x67, 0x0a, 0x04, 0x4d, 0x6f, - 0x63, 0x6b, 0x12, 0x2d, 0x0a, 0x06, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x12, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x00, 0x12, 0x30, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0d, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, + 0x65, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, + 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x05, 0x50, 0x50, + 0x72, 0x6f, 0x66, 0x12, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x50, 0x72, + 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x32, 0x4b, + 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x38, 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x43, + 0x61, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x32, 0x67, 0x0a, 0x04, 0x4d, + 0x6f, 0x63, 0x6b, 0x12, 0x2d, 0x0a, 0x06, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x22, 0x00, 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x73, 0x75, 0x72, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, - 0x2d, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x67, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x00, 0x12, 0x30, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x22, 0x00, 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x73, 0x75, 0x72, 0x65, 0x6e, 0x2f, 0x61, 0x70, + 0x69, 0x2d, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3516,119 +3586,134 @@ var file_pkg_server_server_proto_goTypes = []interface{}{ nil, // 41: server.TestTask.EnvEntry } var file_pkg_server_server_proto_depIdxs = []int32{ - 40, // 0: server.Suites.data:type_name -> server.Suites.DataEntry - 22, // 1: server.TestCaseIdentity.parameters:type_name -> server.Pair - 22, // 2: server.TestSuite.param:type_name -> server.Pair - 6, // 3: server.TestSuite.spec:type_name -> server.APISpec - 4, // 4: server.TestSuiteWithCase.suite:type_name -> server.TestSuite - 17, // 5: server.TestSuiteWithCase.case:type_name -> server.TestCase - 8, // 6: server.APISpec.rpc:type_name -> server.RPC - 7, // 7: server.APISpec.secure:type_name -> server.Secure - 41, // 8: server.TestTask.env:type_name -> server.TestTask.EnvEntry - 22, // 9: server.TestTask.parameters:type_name -> server.Pair - 21, // 10: server.TestResult.testCaseResult:type_name -> server.TestCaseResult - 17, // 11: server.Suite.items:type_name -> server.TestCase - 17, // 12: server.TestCaseWithSuite.data:type_name -> server.TestCase - 17, // 13: server.TestCases.data:type_name -> server.TestCase - 18, // 14: server.TestCase.request:type_name -> server.Request - 19, // 15: server.TestCase.response:type_name -> server.Response - 22, // 16: server.Request.header:type_name -> server.Pair - 22, // 17: server.Request.query:type_name -> server.Pair - 22, // 18: server.Request.cookie:type_name -> server.Pair - 22, // 19: server.Request.form:type_name -> server.Pair - 22, // 20: server.Response.header:type_name -> server.Pair - 22, // 21: server.Response.bodyFieldsExpect:type_name -> server.Pair - 20, // 22: server.Response.ConditionalVerify:type_name -> server.ConditionalVerify - 22, // 23: server.TestCaseResult.header:type_name -> server.Pair - 22, // 24: server.Pairs.data:type_name -> server.Pair - 26, // 25: server.Stores.data:type_name -> server.Store - 22, // 26: server.Store.properties:type_name -> server.Pair - 28, // 27: server.Store.kind:type_name -> server.StoreKind - 28, // 28: server.StoreKinds.data:type_name -> server.StoreKind - 22, // 29: server.SimpleList.data:type_name -> server.Pair - 34, // 30: server.Secrets.data:type_name -> server.Secret - 1, // 31: server.Suites.DataEntry.value:type_name -> server.Items - 10, // 32: server.Runner.Run:input_type -> server.TestTask - 38, // 33: server.Runner.GetSuites:input_type -> server.Empty - 9, // 34: server.Runner.CreateTestSuite:input_type -> server.TestSuiteIdentity - 3, // 35: server.Runner.ImportTestSuite:input_type -> server.TestSuiteSource - 9, // 36: server.Runner.GetTestSuite:input_type -> server.TestSuiteIdentity - 4, // 37: server.Runner.UpdateTestSuite:input_type -> server.TestSuite - 9, // 38: server.Runner.DeleteTestSuite:input_type -> server.TestSuiteIdentity - 9, // 39: server.Runner.GetTestSuiteYaml:input_type -> server.TestSuiteIdentity - 9, // 40: server.Runner.ListTestCase:input_type -> server.TestSuiteIdentity - 9, // 41: server.Runner.GetSuggestedAPIs:input_type -> server.TestSuiteIdentity - 2, // 42: server.Runner.RunTestCase:input_type -> server.TestCaseIdentity - 2, // 43: server.Runner.GetTestCase:input_type -> server.TestCaseIdentity - 15, // 44: server.Runner.CreateTestCase:input_type -> server.TestCaseWithSuite - 15, // 45: server.Runner.UpdateTestCase:input_type -> server.TestCaseWithSuite - 2, // 46: server.Runner.DeleteTestCase:input_type -> server.TestCaseIdentity - 38, // 47: server.Runner.ListCodeGenerator:input_type -> server.Empty - 32, // 48: server.Runner.GenerateCode:input_type -> server.CodeGenerateRequest - 38, // 49: server.Runner.ListConverter:input_type -> server.Empty - 32, // 50: server.Runner.ConvertTestSuite:input_type -> server.CodeGenerateRequest - 38, // 51: server.Runner.PopularHeaders:input_type -> server.Empty - 24, // 52: server.Runner.FunctionsQuery:input_type -> server.SimpleQuery - 24, // 53: server.Runner.FunctionsQueryStream:input_type -> server.SimpleQuery - 38, // 54: server.Runner.GetVersion:input_type -> server.Empty - 38, // 55: server.Runner.Sample:input_type -> server.Empty - 38, // 56: server.Runner.GetStoreKinds:input_type -> server.Empty - 38, // 57: server.Runner.GetStores:input_type -> server.Empty - 26, // 58: server.Runner.CreateStore:input_type -> server.Store - 26, // 59: server.Runner.UpdateStore:input_type -> server.Store - 26, // 60: server.Runner.DeleteStore:input_type -> server.Store - 24, // 61: server.Runner.VerifyStore:input_type -> server.SimpleQuery - 38, // 62: server.Runner.GetSecrets:input_type -> server.Empty - 34, // 63: server.Runner.CreateSecret:input_type -> server.Secret - 34, // 64: server.Runner.DeleteSecret:input_type -> server.Secret - 34, // 65: server.Runner.UpdateSecret:input_type -> server.Secret - 36, // 66: server.Runner.PProf:input_type -> server.PProfRequest - 5, // 67: server.RunnerExtension.Run:input_type -> server.TestSuiteWithCase - 39, // 68: server.Mock.Reload:input_type -> server.MockConfig - 38, // 69: server.Mock.GetConfig:input_type -> server.Empty - 11, // 70: server.Runner.Run:output_type -> server.TestResult - 0, // 71: server.Runner.GetSuites:output_type -> server.Suites - 12, // 72: server.Runner.CreateTestSuite:output_type -> server.HelloReply - 29, // 73: server.Runner.ImportTestSuite:output_type -> server.CommonResult - 4, // 74: server.Runner.GetTestSuite:output_type -> server.TestSuite - 12, // 75: server.Runner.UpdateTestSuite:output_type -> server.HelloReply - 12, // 76: server.Runner.DeleteTestSuite:output_type -> server.HelloReply - 13, // 77: server.Runner.GetTestSuiteYaml:output_type -> server.YamlData - 14, // 78: server.Runner.ListTestCase:output_type -> server.Suite - 16, // 79: server.Runner.GetSuggestedAPIs:output_type -> server.TestCases - 21, // 80: server.Runner.RunTestCase:output_type -> server.TestCaseResult - 17, // 81: server.Runner.GetTestCase:output_type -> server.TestCase - 12, // 82: server.Runner.CreateTestCase:output_type -> server.HelloReply - 12, // 83: server.Runner.UpdateTestCase:output_type -> server.HelloReply - 12, // 84: server.Runner.DeleteTestCase:output_type -> server.HelloReply - 30, // 85: server.Runner.ListCodeGenerator:output_type -> server.SimpleList - 29, // 86: server.Runner.GenerateCode:output_type -> server.CommonResult - 30, // 87: server.Runner.ListConverter:output_type -> server.SimpleList - 29, // 88: server.Runner.ConvertTestSuite:output_type -> server.CommonResult - 23, // 89: server.Runner.PopularHeaders:output_type -> server.Pairs - 23, // 90: server.Runner.FunctionsQuery:output_type -> server.Pairs - 23, // 91: server.Runner.FunctionsQueryStream:output_type -> server.Pairs - 12, // 92: server.Runner.GetVersion:output_type -> server.HelloReply - 12, // 93: server.Runner.Sample:output_type -> server.HelloReply - 27, // 94: server.Runner.GetStoreKinds:output_type -> server.StoreKinds - 25, // 95: server.Runner.GetStores:output_type -> server.Stores - 26, // 96: server.Runner.CreateStore:output_type -> server.Store - 26, // 97: server.Runner.UpdateStore:output_type -> server.Store - 26, // 98: server.Runner.DeleteStore:output_type -> server.Store - 35, // 99: server.Runner.VerifyStore:output_type -> server.ExtensionStatus - 33, // 100: server.Runner.GetSecrets:output_type -> server.Secrets - 29, // 101: server.Runner.CreateSecret:output_type -> server.CommonResult - 29, // 102: server.Runner.DeleteSecret:output_type -> server.CommonResult - 29, // 103: server.Runner.UpdateSecret:output_type -> server.CommonResult - 37, // 104: server.Runner.PProf:output_type -> server.PProfData - 29, // 105: server.RunnerExtension.Run:output_type -> server.CommonResult - 38, // 106: server.Mock.Reload:output_type -> server.Empty - 39, // 107: server.Mock.GetConfig:output_type -> server.MockConfig - 70, // [70:108] is the sub-list for method output_type - 32, // [32:70] is the sub-list for method input_type - 32, // [32:32] is the sub-list for extension type_name - 32, // [32:32] is the sub-list for extension extendee - 0, // [0:32] is the sub-list for field type_name + 45, // 0: server.Suites.data:type_name -> server.Suites.DataEntry + 46, // 1: server.HistorySuites.data:type_name -> server.HistorySuites.DataEntry + 4, // 2: server.HistoryItems.data:type_name -> server.HistoryCaseIdentity + 27, // 3: server.TestCaseIdentity.parameters:type_name -> server.Pair + 27, // 4: server.TestSuite.param:type_name -> server.Pair + 9, // 5: server.TestSuite.spec:type_name -> server.APISpec + 7, // 6: server.TestSuiteWithCase.suite:type_name -> server.TestSuite + 21, // 7: server.TestSuiteWithCase.case:type_name -> server.TestCase + 11, // 8: server.APISpec.rpc:type_name -> server.RPC + 10, // 9: server.APISpec.secure:type_name -> server.Secure + 47, // 10: server.TestTask.env:type_name -> server.TestTask.EnvEntry + 27, // 11: server.TestTask.parameters:type_name -> server.Pair + 26, // 12: server.TestResult.testCaseResult:type_name -> server.TestCaseResult + 26, // 13: server.HistoryTestResult.testCaseResult:type_name -> server.TestCaseResult + 22, // 14: server.HistoryTestResult.data:type_name -> server.HistoryTestCase + 48, // 15: server.HistoryTestResult.createTime:type_name -> google.protobuf.Timestamp + 21, // 16: server.Suite.items:type_name -> server.TestCase + 21, // 17: server.TestCaseWithSuite.data:type_name -> server.TestCase + 21, // 18: server.TestCases.data:type_name -> server.TestCase + 23, // 19: server.TestCase.request:type_name -> server.Request + 24, // 20: server.TestCase.response:type_name -> server.Response + 48, // 21: server.HistoryTestCase.createTime:type_name -> google.protobuf.Timestamp + 27, // 22: server.HistoryTestCase.suiteParam:type_name -> server.Pair + 9, // 23: server.HistoryTestCase.suiteSpec:type_name -> server.APISpec + 23, // 24: server.HistoryTestCase.request:type_name -> server.Request + 24, // 25: server.HistoryTestCase.response:type_name -> server.Response + 27, // 26: server.Request.header:type_name -> server.Pair + 27, // 27: server.Request.query:type_name -> server.Pair + 27, // 28: server.Request.cookie:type_name -> server.Pair + 27, // 29: server.Request.form:type_name -> server.Pair + 27, // 30: server.Response.header:type_name -> server.Pair + 27, // 31: server.Response.bodyFieldsExpect:type_name -> server.Pair + 25, // 32: server.Response.ConditionalVerify:type_name -> server.ConditionalVerify + 27, // 33: server.TestCaseResult.header:type_name -> server.Pair + 27, // 34: server.Pairs.data:type_name -> server.Pair + 31, // 35: server.Stores.data:type_name -> server.Store + 27, // 36: server.Store.properties:type_name -> server.Pair + 33, // 37: server.Store.kind:type_name -> server.StoreKind + 33, // 38: server.StoreKinds.data:type_name -> server.StoreKind + 27, // 39: server.SimpleList.data:type_name -> server.Pair + 39, // 40: server.Secrets.data:type_name -> server.Secret + 1, // 41: server.Suites.DataEntry.value:type_name -> server.Items + 3, // 42: server.HistorySuites.DataEntry.value:type_name -> server.HistoryItems + 13, // 43: server.Runner.Run:input_type -> server.TestTask + 43, // 44: server.Runner.GetSuites:input_type -> server.Empty + 12, // 45: server.Runner.CreateTestSuite:input_type -> server.TestSuiteIdentity + 6, // 46: server.Runner.ImportTestSuite:input_type -> server.TestSuiteSource + 12, // 47: server.Runner.GetTestSuite:input_type -> server.TestSuiteIdentity + 7, // 48: server.Runner.UpdateTestSuite:input_type -> server.TestSuite + 12, // 49: server.Runner.DeleteTestSuite:input_type -> server.TestSuiteIdentity + 12, // 50: server.Runner.GetTestSuiteYaml:input_type -> server.TestSuiteIdentity + 12, // 51: server.Runner.ListTestCase:input_type -> server.TestSuiteIdentity + 12, // 52: server.Runner.GetSuggestedAPIs:input_type -> server.TestSuiteIdentity + 5, // 53: server.Runner.RunTestCase:input_type -> server.TestCaseIdentity + 5, // 54: server.Runner.GetTestCase:input_type -> server.TestCaseIdentity + 19, // 55: server.Runner.CreateTestCase:input_type -> server.TestCaseWithSuite + 19, // 56: server.Runner.UpdateTestCase:input_type -> server.TestCaseWithSuite + 5, // 57: server.Runner.DeleteTestCase:input_type -> server.TestCaseIdentity + 43, // 58: server.Runner.GetHistorySuites:input_type -> server.Empty + 22, // 59: server.Runner.GetHistoryTestCase:input_type -> server.HistoryTestCase + 43, // 60: server.Runner.ListCodeGenerator:input_type -> server.Empty + 37, // 61: server.Runner.GenerateCode:input_type -> server.CodeGenerateRequest + 43, // 62: server.Runner.ListConverter:input_type -> server.Empty + 37, // 63: server.Runner.ConvertTestSuite:input_type -> server.CodeGenerateRequest + 43, // 64: server.Runner.PopularHeaders:input_type -> server.Empty + 29, // 65: server.Runner.FunctionsQuery:input_type -> server.SimpleQuery + 29, // 66: server.Runner.FunctionsQueryStream:input_type -> server.SimpleQuery + 43, // 67: server.Runner.GetVersion:input_type -> server.Empty + 43, // 68: server.Runner.Sample:input_type -> server.Empty + 43, // 69: server.Runner.GetStoreKinds:input_type -> server.Empty + 43, // 70: server.Runner.GetStores:input_type -> server.Empty + 31, // 71: server.Runner.CreateStore:input_type -> server.Store + 31, // 72: server.Runner.UpdateStore:input_type -> server.Store + 31, // 73: server.Runner.DeleteStore:input_type -> server.Store + 29, // 74: server.Runner.VerifyStore:input_type -> server.SimpleQuery + 43, // 75: server.Runner.GetSecrets:input_type -> server.Empty + 39, // 76: server.Runner.CreateSecret:input_type -> server.Secret + 39, // 77: server.Runner.DeleteSecret:input_type -> server.Secret + 39, // 78: server.Runner.UpdateSecret:input_type -> server.Secret + 41, // 79: server.Runner.PProf:input_type -> server.PProfRequest + 8, // 80: server.RunnerExtension.Run:input_type -> server.TestSuiteWithCase + 44, // 81: server.Mock.Reload:input_type -> server.MockConfig + 43, // 82: server.Mock.GetConfig:input_type -> server.Empty + 14, // 83: server.Runner.Run:output_type -> server.TestResult + 0, // 84: server.Runner.GetSuites:output_type -> server.Suites + 16, // 85: server.Runner.CreateTestSuite:output_type -> server.HelloReply + 34, // 86: server.Runner.ImportTestSuite:output_type -> server.CommonResult + 7, // 87: server.Runner.GetTestSuite:output_type -> server.TestSuite + 16, // 88: server.Runner.UpdateTestSuite:output_type -> server.HelloReply + 16, // 89: server.Runner.DeleteTestSuite:output_type -> server.HelloReply + 17, // 90: server.Runner.GetTestSuiteYaml:output_type -> server.YamlData + 18, // 91: server.Runner.ListTestCase:output_type -> server.Suite + 20, // 92: server.Runner.GetSuggestedAPIs:output_type -> server.TestCases + 26, // 93: server.Runner.RunTestCase:output_type -> server.TestCaseResult + 21, // 94: server.Runner.GetTestCase:output_type -> server.TestCase + 16, // 95: server.Runner.CreateTestCase:output_type -> server.HelloReply + 16, // 96: server.Runner.UpdateTestCase:output_type -> server.HelloReply + 16, // 97: server.Runner.DeleteTestCase:output_type -> server.HelloReply + 2, // 98: server.Runner.GetHistorySuites:output_type -> server.HistorySuites + 15, // 99: server.Runner.GetHistoryTestCase:output_type -> server.HistoryTestResult + 35, // 100: server.Runner.ListCodeGenerator:output_type -> server.SimpleList + 34, // 101: server.Runner.GenerateCode:output_type -> server.CommonResult + 35, // 102: server.Runner.ListConverter:output_type -> server.SimpleList + 34, // 103: server.Runner.ConvertTestSuite:output_type -> server.CommonResult + 28, // 104: server.Runner.PopularHeaders:output_type -> server.Pairs + 28, // 105: server.Runner.FunctionsQuery:output_type -> server.Pairs + 28, // 106: server.Runner.FunctionsQueryStream:output_type -> server.Pairs + 16, // 107: server.Runner.GetVersion:output_type -> server.HelloReply + 16, // 108: server.Runner.Sample:output_type -> server.HelloReply + 32, // 109: server.Runner.GetStoreKinds:output_type -> server.StoreKinds + 30, // 110: server.Runner.GetStores:output_type -> server.Stores + 31, // 111: server.Runner.CreateStore:output_type -> server.Store + 31, // 112: server.Runner.UpdateStore:output_type -> server.Store + 31, // 113: server.Runner.DeleteStore:output_type -> server.Store + 40, // 114: server.Runner.VerifyStore:output_type -> server.ExtensionStatus + 38, // 115: server.Runner.GetSecrets:output_type -> server.Secrets + 34, // 116: server.Runner.CreateSecret:output_type -> server.CommonResult + 34, // 117: server.Runner.DeleteSecret:output_type -> server.CommonResult + 34, // 118: server.Runner.UpdateSecret:output_type -> server.CommonResult + 42, // 119: server.Runner.PProf:output_type -> server.PProfData + 34, // 120: server.RunnerExtension.Run:output_type -> server.CommonResult + 43, // 121: server.Mock.Reload:output_type -> server.Empty + 44, // 122: server.Mock.GetConfig:output_type -> server.MockConfig + 83, // [83:123] is the sub-list for method output_type + 43, // [43:83] is the sub-list for method input_type + 43, // [43:43] is the sub-list for extension type_name + 43, // [43:43] is the sub-list for extension extendee + 0, // [0:43] is the sub-list for field type_name } func init() { file_pkg_server_server_proto_init() } diff --git a/pkg/server/server.pb.gw.go b/pkg/server/server.pb.gw.go index 1864985c5..6a14101b1 100644 --- a/pkg/server/server.pb.gw.go +++ b/pkg/server/server.pb.gw.go @@ -1016,6 +1016,32 @@ func local_request_Runner_GetHistorySuites_0(ctx context.Context, marshaler runt } +func request_Runner_GetHistoryTestCaseWithResult_0(ctx context.Context, marshaler runtime.Marshaler, client RunnerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HistoryTestCase + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetHistoryTestCaseWithResult(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Runner_GetHistoryTestCaseWithResult_0(ctx context.Context, marshaler runtime.Marshaler, server RunnerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HistoryTestCase + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetHistoryTestCaseWithResult(ctx, &protoReq) + return msg, metadata, err + +} + func request_Runner_GetHistoryTestCase_0(ctx context.Context, marshaler runtime.Marshaler, client RunnerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq HistoryTestCase var metadata runtime.ServerMetadata @@ -1042,6 +1068,58 @@ func local_request_Runner_GetHistoryTestCase_0(ctx context.Context, marshaler ru } +func request_Runner_DeleteHistoryTestCase_0(ctx context.Context, marshaler runtime.Marshaler, client RunnerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HistoryTestCase + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.DeleteHistoryTestCase(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Runner_DeleteHistoryTestCase_0(ctx context.Context, marshaler runtime.Marshaler, server RunnerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HistoryTestCase + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.DeleteHistoryTestCase(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Runner_RunHistoryTestCase_0(ctx context.Context, marshaler runtime.Marshaler, client RunnerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HistoryTestCase + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RunHistoryTestCase(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Runner_RunHistoryTestCase_0(ctx context.Context, marshaler runtime.Marshaler, server RunnerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HistoryTestCase + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.RunHistoryTestCase(ctx, &protoReq) + return msg, metadata, err + +} + func request_Runner_DuplicateTestCase_0(ctx context.Context, marshaler runtime.Marshaler, client RunnerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq TestCaseDuplicate var metadata runtime.ServerMetadata @@ -2280,6 +2358,31 @@ func RegisterRunnerHandlerServer(ctx context.Context, mux *runtime.ServeMux, ser }) + mux.Handle("POST", pattern_Runner_GetHistoryTestCaseWithResult_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/server.Runner/GetHistoryTestCaseWithResult", runtime.WithHTTPPathPattern("/server.Runner/GetHistoryTestCaseWithResult")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Runner_GetHistoryTestCaseWithResult_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Runner_GetHistoryTestCaseWithResult_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_Runner_GetHistoryTestCase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2305,6 +2408,56 @@ func RegisterRunnerHandlerServer(ctx context.Context, mux *runtime.ServeMux, ser }) + mux.Handle("POST", pattern_Runner_DeleteHistoryTestCase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/server.Runner/DeleteHistoryTestCase", runtime.WithHTTPPathPattern("/server.Runner/DeleteHistoryTestCase")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Runner_DeleteHistoryTestCase_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Runner_DeleteHistoryTestCase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Runner_RunHistoryTestCase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/server.Runner/RunHistoryTestCase", runtime.WithHTTPPathPattern("/server.Runner/RunHistoryTestCase")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Runner_RunHistoryTestCase_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Runner_RunHistoryTestCase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_Runner_DuplicateTestCase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3345,6 +3498,28 @@ func RegisterRunnerHandlerClient(ctx context.Context, mux *runtime.ServeMux, cli }) + mux.Handle("POST", pattern_Runner_GetHistoryTestCaseWithResult_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/server.Runner/GetHistoryTestCaseWithResult", runtime.WithHTTPPathPattern("/server.Runner/GetHistoryTestCaseWithResult")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Runner_GetHistoryTestCaseWithResult_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Runner_GetHistoryTestCaseWithResult_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_Runner_GetHistoryTestCase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3367,6 +3542,50 @@ func RegisterRunnerHandlerClient(ctx context.Context, mux *runtime.ServeMux, cli }) + mux.Handle("POST", pattern_Runner_DeleteHistoryTestCase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/server.Runner/DeleteHistoryTestCase", runtime.WithHTTPPathPattern("/server.Runner/DeleteHistoryTestCase")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Runner_DeleteHistoryTestCase_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Runner_DeleteHistoryTestCase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Runner_RunHistoryTestCase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/server.Runner/RunHistoryTestCase", runtime.WithHTTPPathPattern("/server.Runner/RunHistoryTestCase")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Runner_RunHistoryTestCase_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Runner_RunHistoryTestCase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_Runner_DuplicateTestCase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3885,9 +4104,9 @@ var ( pattern_Runner_DeleteTestCase_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"server.Runner", "DeleteTestCase"}, "")) - pattern_Runner_DeleteTestCase_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "suites", "suite", "cases", "testcase"}, "")) + pattern_Runner_GetHistorySuites_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"server.Runner", "GetHistorySuites"}, "")) - pattern_Runner_DuplicateTestCase_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"api", "v1", "suites", "sourceSuiteName", "cases", "sourceCaseName", "duplicate"}, "")) + pattern_Runner_GetHistoryTestCase_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"server.Runner", "GetHistoryTestCase"}, "")) pattern_Runner_GetSuggestedAPIs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "suggestedAPIs"}, "")) @@ -3965,6 +4184,10 @@ var ( forward_Runner_DeleteTestCase_0 = runtime.ForwardResponseMessage + forward_Runner_GetHistorySuites_0 = runtime.ForwardResponseMessage + + forward_Runner_GetHistoryTestCase_0 = runtime.ForwardResponseMessage + forward_Runner_ListCodeGenerator_0 = runtime.ForwardResponseMessage forward_Runner_GenerateCode_0 = runtime.ForwardResponseMessage diff --git a/pkg/server/server.proto b/pkg/server/server.proto index cf93a0925..809de39ba 100644 --- a/pkg/server/server.proto +++ b/pkg/server/server.proto @@ -116,7 +116,9 @@ service Runner { // history test related rpc GetHistorySuites(Empty) returns (HistorySuites) {} - rpc GetHistoryTestCase(HistoryTestCase) returns (HistoryTestResult) {} + rpc GetHistoryTestCaseWithResult(HistoryTestCase) returns (HistoryTestResult) {} + rpc GetHistoryTestCase(HistoryTestCase) returns (HistoryTestCase) {} + rpc DeleteHistoryTestCase(HistoryTestCase) returns (HelloReply) {} // code generator rpc ListCodeGenerator(Empty) returns (SimpleList) { @@ -272,6 +274,7 @@ message TestCaseIdentity { string suite = 1; string testcase = 2; repeated Pair parameters = 3; + } message TestSuiteSource { diff --git a/pkg/server/server.swagger.json b/pkg/server/server.swagger.json index e370a9c1a..20355cb28 100644 --- a/pkg/server/server.swagger.json +++ b/pkg/server/server.swagger.json @@ -255,6 +255,38 @@ ] } }, + "/server.Runner/DeleteHistoryTestCase": { + "post": { + "operationId": "Runner_DeleteHistoryTestCase", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/serverHelloReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/serverHistoryTestCase" + } + } + ], + "tags": [ + "Runner" + ] + } + }, "/api/v1/mock/reload": { "post": { "operationId": "Mock_Reload", @@ -538,6 +570,70 @@ "/server.Runner/GetHistoryTestCase": { "post": { "operationId": "Runner_GetHistoryTestCase", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/serverHistoryTestCase" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/serverHistoryTestCase" + } + } + ], + "tags": [ + "Runner" + ] + } + }, + "/server.Runner/GetHistoryTestCaseWithResult": { + "post": { + "operationId": "Runner_GetHistoryTestCaseWithResult", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/serverHistoryTestCase" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/serverHistoryTestCase" + } + } + ], + "tags": [ + "Runner" + ] + } + }, + "/server.Runner/GetHistoryTestCaseWithResult": { + "post": { + "operationId": "Runner_GetHistoryTestCaseWithResult", "responses": { "200": { "description": "A successful response.", @@ -1296,7 +1392,7 @@ ] } }, - "/api/v1/suites/{sourceSuiteName}/duplicate": { + "/server.Runner/RunTestCase": { "post": { "operationId": "Runner_DuplicateTestSuite", "responses": { diff --git a/pkg/server/server_grpc.pb.go b/pkg/server/server_grpc.pb.go index 0507ee0e2..326d13df2 100644 --- a/pkg/server/server_grpc.pb.go +++ b/pkg/server/server_grpc.pb.go @@ -48,7 +48,6 @@ type RunnerClient interface { // history test related GetHistorySuites(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*HistorySuites, error) GetHistoryTestCase(ctx context.Context, in *HistoryTestCase, opts ...grpc.CallOption) (*HistoryTestResult, error) - // code generator ListCodeGenerator(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*SimpleList, error) GenerateCode(ctx context.Context, in *CodeGenerateRequest, opts ...grpc.CallOption) (*CommonResult, error) @@ -260,27 +259,18 @@ func (c *runnerClient) GetHistorySuites(ctx context.Context, in *Empty, opts ... return out, nil } -func (c *runnerClient) GetHistoryTestCase(ctx context.Context, in *HistoryTestCase, opts ...grpc.CallOption) (*HistoryTestResult, error) { +func (c *runnerClient) GetHistoryTestCaseWithResult(ctx context.Context, in *HistoryTestCase, opts ...grpc.CallOption) (*HistoryTestResult, error) { out := new(HistoryTestResult) - err := c.cc.Invoke(ctx, "/server.Runner/GetHistoryTestCase", in, out, opts...) + err := c.cc.Invoke(ctx, "/server.Runner/GetHistoryTestCaseWithResult", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *runnerClient) DuplicateTestCase(ctx context.Context, in *TestCaseDuplicate, opts ...grpc.CallOption) (*HelloReply, error) { - out := new(HelloReply) - err := c.cc.Invoke(ctx, "/server.Runner/DuplicateTestCase", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *runnerClient) GetSuggestedAPIs(ctx context.Context, in *TestSuiteIdentity, opts ...grpc.CallOption) (*TestCases, error) { - out := new(TestCases) - err := c.cc.Invoke(ctx, "/server.Runner/GetSuggestedAPIs", in, out, opts...) +func (c *runnerClient) GetHistoryTestCase(ctx context.Context, in *HistoryTestCase, opts ...grpc.CallOption) (*HistoryTestCase, error) { + out := new(HistoryTestCase) + err := c.cc.Invoke(ctx, "/server.Runner/GetHistoryTestCase", in, out, opts...) if err != nil { return nil, err } @@ -519,7 +509,6 @@ type RunnerServer interface { // history test related GetHistorySuites(context.Context, *Empty) (*HistorySuites, error) GetHistoryTestCase(context.Context, *HistoryTestCase) (*HistoryTestResult, error) - // code generator ListCodeGenerator(context.Context, *Empty) (*SimpleList, error) GenerateCode(context.Context, *CodeGenerateRequest) (*CommonResult, error) @@ -604,14 +593,11 @@ func (UnimplementedRunnerServer) DeleteTestCase(context.Context, *TestCaseIdenti func (UnimplementedRunnerServer) GetHistorySuites(context.Context, *Empty) (*HistorySuites, error) { return nil, status.Errorf(codes.Unimplemented, "method GetHistorySuites not implemented") } -func (UnimplementedRunnerServer) GetHistoryTestCase(context.Context, *HistoryTestCase) (*HistoryTestResult, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetHistoryTestCase not implemented") -} -func (UnimplementedRunnerServer) DuplicateTestCase(context.Context, *TestCaseDuplicate) (*HelloReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method DuplicateTestCase not implemented") +func (UnimplementedRunnerServer) GetHistoryTestCaseWithResult(context.Context, *HistoryTestCase) (*HistoryTestResult, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetHistoryTestCaseWithResult not implemented") } -func (UnimplementedRunnerServer) GetSuggestedAPIs(context.Context, *TestSuiteIdentity) (*TestCases, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetSuggestedAPIs not implemented") +func (UnimplementedRunnerServer) GetHistoryTestCase(context.Context, *HistoryTestCase) (*HistoryTestCase, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetHistoryTestCase not implemented") } func (UnimplementedRunnerServer) ListCodeGenerator(context.Context, *Empty) (*SimpleList, error) { return nil, status.Errorf(codes.Unimplemented, "method ListCodeGenerator not implemented") @@ -1000,56 +986,38 @@ func _Runner_GetHistorySuites_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } -func _Runner_GetHistoryTestCase_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Runner_GetHistoryTestCaseWithResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(HistoryTestCase) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(RunnerServer).GetHistoryTestCase(ctx, in) + return srv.(RunnerServer).GetHistoryTestCaseWithResult(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/server.Runner/GetHistoryTestCase", + FullMethod: "/server.Runner/GetHistoryTestCaseWithResult", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RunnerServer).GetHistoryTestCase(ctx, req.(*HistoryTestCase)) + return srv.(RunnerServer).GetHistoryTestCaseWithResult(ctx, req.(*HistoryTestCase)) } return interceptor(ctx, in, info, handler) } -func _Runner_DuplicateTestCase_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(TestCaseDuplicate) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RunnerServer).DuplicateTestCase(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/server.Runner/DuplicateTestCase", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RunnerServer).DuplicateTestCase(ctx, req.(*TestCaseDuplicate)) - } - return interceptor(ctx, in, info, handler) -} - -func _Runner_GetSuggestedAPIs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(TestSuiteIdentity) +func _Runner_GetHistoryTestCase_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(HistoryTestCase) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(RunnerServer).GetSuggestedAPIs(ctx, in) + return srv.(RunnerServer).GetHistoryTestCase(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/server.Runner/GetSuggestedAPIs", + FullMethod: "/server.Runner/GetHistoryTestCase", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RunnerServer).GetSuggestedAPIs(ctx, req.(*TestSuiteIdentity)) + return srv.(RunnerServer).GetHistoryTestCase(ctx, req.(*HistoryTestCase)) } return interceptor(ctx, in, info, handler) } @@ -1494,16 +1462,12 @@ var Runner_ServiceDesc = grpc.ServiceDesc{ Handler: _Runner_GetHistorySuites_Handler, }, { - MethodName: "GetHistoryTestCase", - Handler: _Runner_GetHistoryTestCase_Handler, - }, - { - MethodName: "DuplicateTestCase", - Handler: _Runner_DuplicateTestCase_Handler, + MethodName: "GetHistoryTestCaseWithResult", + Handler: _Runner_GetHistoryTestCaseWithResult_Handler, }, { - MethodName: "GetSuggestedAPIs", - Handler: _Runner_GetSuggestedAPIs_Handler, + MethodName: "GetHistoryTestCase", + Handler: _Runner_GetHistoryTestCase_Handler, }, { MethodName: "ListCodeGenerator", diff --git a/pkg/testing/loader.go b/pkg/testing/loader.go index 7f9da993c..b4538ee2f 100644 --- a/pkg/testing/loader.go +++ b/pkg/testing/loader.go @@ -39,7 +39,9 @@ type Writer interface { ListHistoryTestSuite() (suites []HistoryTestSuite, err error) CreateHistoryTestCase(testcaseResult TestCaseResult, suiteName *TestSuite) (err error) - GetHistoryTestCase(id string) (historyTestCase HistoryTestResult, err error) + GetHistoryTestCaseWithResult(id string) (historyTestCase HistoryTestResult, err error) + GetHistoryTestCase(id string) (historyTestCase HistoryTestCase, err error) + DeleteHistoryTestCase(id string) (err error) ListTestSuite() (suites []TestSuite, err error) GetTestSuite(name string, full bool) (suite TestSuite, err error) diff --git a/pkg/testing/loader_file.go b/pkg/testing/loader_file.go index 6813154db..22a08413c 100644 --- a/pkg/testing/loader_file.go +++ b/pkg/testing/loader_file.go @@ -437,7 +437,15 @@ func (l *fileLoader) ListHistoryTestSuite() (suites []HistoryTestSuite, err erro return } -func (l *fileLoader) GetHistoryTestCase(id string) (testcase HistoryTestResult, err error) { +func (l *fileLoader) GetHistoryTestCaseWithResult(id string) (testcase HistoryTestResult, err error) { + return +} + +func (l *fileLoader) GetHistoryTestCase(id string) (testcase HistoryTestCase, err error) { + return +} + +func (l *fileLoader) DeleteHistoryTestCase(id string) (err error) { return } diff --git a/pkg/testing/loader_non.go b/pkg/testing/loader_non.go index 0544955ec..106379c0c 100644 --- a/pkg/testing/loader_non.go +++ b/pkg/testing/loader_non.go @@ -108,7 +108,14 @@ func (l *nonLoader) ListHistoryTestSuite()(suites []HistoryTestSuite, err error) return } -func (l *nonLoader) GetHistoryTestCase(id string) (testcase HistoryTestResult, err error) { +func (l *nonLoader) GetHistoryTestCaseWithResult(id string) (testcase HistoryTestResult, err error) { + return +} + +func (l *nonLoader) GetHistoryTestCase(id string) (testcase HistoryTestCase, err error) { + return +} +func (l *nonLoader) DeleteHistoryTestCase(id string) (err error) { return } diff --git a/pkg/testing/remote/converter.go b/pkg/testing/remote/converter.go index d3925ebf6..02773551b 100644 --- a/pkg/testing/remote/converter.go +++ b/pkg/testing/remote/converter.go @@ -193,32 +193,34 @@ func ConvertToGRPCTestCase(testcase testing.TestCase) (result *server.TestCase) return } -func ConvertToGRPCHistoryTestCase(testcase testing.TestCase, suite *testing.TestSuite) (result *server.HistoryTestCase) { +func ConvertToGRPCHistoryTestCase(historyTestcase testing.HistoryTestCase) (result *server.HistoryTestCase) { + req := historyTestcase.Data.Request + res := historyTestcase.Data.Expect result = &server.HistoryTestCase{ - CaseName: testcase.Name, - SuiteName: suite.Name, - SuiteApi: suite.API, - SuiteParam: mapToPair(suite.Param), + CaseName: historyTestcase.CaseName, + SuiteName: historyTestcase.SuiteName, + SuiteApi: historyTestcase.SuiteAPI, + SuiteParam: mapToPair(historyTestcase.SuiteParam), Request: &server.Request{ - Api: testcase.Request.API, - Method: testcase.Request.Method, - Body: testcase.Request.Body.String(), - Header: mapToPair(testcase.Request.Header), - Query: mapInterToPair(testcase.Request.Query), - Form: mapToPair(testcase.Request.Form), + Api: req.API, + Method: req.Method, + Body: req.Body.String(), + Header: mapToPair(req.Header), + Query: mapInterToPair(req.Query), + Form: mapToPair(req.Form), }, Response: &server.Response{ - Body: testcase.Expect.Body, - StatusCode: int32(testcase.Expect.StatusCode), - Schema: testcase.Expect.Schema, - Verify: testcase.Expect.Verify, - Header: mapToPair(testcase.Expect.Header), - BodyFieldsExpect: mapInterToPair(testcase.Expect.BodyFieldsExpect), + Body: res.Body, + StatusCode: int32(res.StatusCode), + Schema: res.Schema, + Verify: res.Verify, + Header: mapToPair(res.Header), + BodyFieldsExpect: mapInterToPair(res.BodyFieldsExpect), }, } - result.SuiteSpec = server.ToGRPCTestSuiteSpec(suite.Spec) + result.SuiteSpec = server.ToGRPCTestSuiteSpec(historyTestcase.SuiteSpec) return } @@ -285,7 +287,16 @@ func ConvertToGRPCTestCaseResult(testCaseResult testing.TestCaseResult, testSuit result.TestCaseResult = append(result.TestCaseResult, res) for _, testCase := range testSuite.Items { - result.Data = ConvertToGRPCHistoryTestCase(testCase, testSuite) + data := testing.HistoryTestCase{ + CaseName: testCase.Name, + SuiteName: testSuite.Name, + SuiteAPI: testSuite.API, + SuiteSpec: testSuite.Spec, + SuiteParam: testSuite.Param, + Data: testCase, + } + + result.Data = ConvertToGRPCHistoryTestCase(data) } return result diff --git a/pkg/testing/remote/grpc_store.go b/pkg/testing/remote/grpc_store.go index 9cb33a5eb..7f5ce2d59 100644 --- a/pkg/testing/remote/grpc_store.go +++ b/pkg/testing/remote/grpc_store.go @@ -119,9 +119,9 @@ func (g *gRPCLoader) GetTestCase(suite, name string) (testcase testing.TestCase, return } -func (g *gRPCLoader) GetHistoryTestCase(id string) (result testing.HistoryTestResult, err error) { +func (g *gRPCLoader) GetHistoryTestCaseWithResult(id string) (result testing.HistoryTestResult, err error) { var historyTestResult *server.HistoryTestResult - historyTestResult, err = g.client.GetHistoryTestCase(g.ctx, &server.HistoryTestCase{ + historyTestResult, err = g.client.GetHistoryTestCaseWithResult(g.ctx, &server.HistoryTestCase{ ID: id, }) if err == nil && historyTestResult != nil { @@ -130,6 +130,17 @@ func (g *gRPCLoader) GetHistoryTestCase(id string) (result testing.HistoryTestRe return } +func (g *gRPCLoader) GetHistoryTestCase(id string) (result testing.HistoryTestCase, err error) { + var historyTestCase *server.HistoryTestCase + historyTestCase, err = g.client.GetHistoryTestCase(g.ctx, &server.HistoryTestCase{ + ID: id, + }) + if err == nil && historyTestCase != nil { + result = ConvertToNormalHistoryTestCase(historyTestCase) + } + return +} + func (g *gRPCLoader) CreateTestCase(suite string, testcase testing.TestCase) (err error) { payload := ConvertToGRPCTestCase(testcase) payload.SuiteName = suite @@ -169,6 +180,13 @@ func (g *gRPCLoader) ListHistoryTestSuite() (suites []testing.HistoryTestSuite, return } +func (g *gRPCLoader) DeleteHistoryTestCase(id string) (err error) { + _, err = g.client.DeleteHistoryTestCase(g.ctx, &server.HistoryTestCase{ + ID: id, + }) + return +} + func (g *gRPCLoader) ListTestSuite() (suites []testing.TestSuite, err error) { var items *TestSuites items, err = g.client.ListTestSuite(g.ctx, &server.Empty{}) diff --git a/pkg/testing/remote/loader.pb.go b/pkg/testing/remote/loader.pb.go index 7dbecf54f..f2c5abc25 100644 --- a/pkg/testing/remote/loader.pb.go +++ b/pkg/testing/remote/loader.pb.go @@ -177,70 +177,94 @@ var file_pkg_testing_remote_loader_proto_rawDesc = []byte{ 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x75, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x75, 0x6c, 0x6c, - 0x32, 0x97, 0x05, 0x0a, 0x06, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x0d, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x0d, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x22, - 0x00, 0x12, 0x35, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, - 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, - 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x54, - 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x11, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x22, 0x00, - 0x12, 0x39, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, - 0x69, 0x74, 0x65, 0x12, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, - 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, - 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x0f, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, - 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, - 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, - 0x73, 0x65, 0x73, 0x12, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, - 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x73, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x0e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x10, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, - 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, - 0x12, 0x33, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, - 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, - 0x65, 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, - 0x61, 0x73, 0x65, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, - 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x22, 0x00, 0x12, 0x33, 0x0a, - 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, + 0x22, 0x41, 0x0a, 0x11, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x53, + 0x75, 0x69, 0x74, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x6d, 0x0a, 0x10, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, + 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x53, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x10, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x75, 0x69, 0x74, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x73, 0x74, + 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x32, 0xec, 0x06, 0x0a, 0x06, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x12, 0x34, 0x0a, + 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x0d, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, + 0x73, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, + 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, + 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x47, 0x65, + 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, 0x2e, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x11, 0x2e, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, + 0x22, 0x00, 0x12, 0x39, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, + 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, + 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, + 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, + 0x12, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, + 0x69, 0x74, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, + 0x43, 0x61, 0x73, 0x65, 0x73, 0x12, 0x11, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x54, + 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x73, 0x22, 0x00, 0x12, 0x33, 0x0a, + 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x00, 0x12, 0x32, 0x0a, 0x06, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x0d, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x05, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x12, - 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, - 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x32, 0x96, 0x02, 0x0a, 0x0d, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2d, 0x0a, 0x09, - 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x00, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x73, 0x75, 0x72, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, - 0x2d, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x22, 0x00, 0x12, 0x33, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, + 0x65, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, + 0x61, 0x73, 0x65, 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, + 0x74, 0x43, 0x61, 0x73, 0x65, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x10, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x33, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, + 0x65, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, + 0x61, 0x73, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, + 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x0d, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x19, 0x2e, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, + 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x0d, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x4a, 0x0a, + 0x12, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, + 0x61, 0x73, 0x65, 0x12, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x19, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x06, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x79, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x32, 0x0a, + 0x05, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x12, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x50, 0x50, 0x72, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x22, + 0x00, 0x32, 0x96, 0x02, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x1a, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x73, 0x75, + 0x72, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2d, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, + 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -273,48 +297,56 @@ var file_pkg_testing_remote_loader_proto_goTypes = []interface{}{ } var file_pkg_testing_remote_loader_proto_depIdxs = []int32{ 1, // 0: remote.TestSuites.data:type_name -> remote.TestSuite - 2, // 1: remote.TestSuite.param:type_name -> server.Pair - 3, // 2: remote.TestSuite.spec:type_name -> server.APISpec - 4, // 3: remote.TestSuite.items:type_name -> server.TestCase - 5, // 4: remote.Loader.ListTestSuite:input_type -> server.Empty - 1, // 5: remote.Loader.CreateTestSuite:input_type -> remote.TestSuite - 1, // 6: remote.Loader.GetTestSuite:input_type -> remote.TestSuite - 1, // 7: remote.Loader.UpdateTestSuite:input_type -> remote.TestSuite - 1, // 8: remote.Loader.DeleteTestSuite:input_type -> remote.TestSuite - 1, // 9: remote.Loader.ListTestCases:input_type -> remote.TestSuite - 4, // 10: remote.Loader.CreateTestCase:input_type -> server.TestCase - 4, // 11: remote.Loader.GetTestCase:input_type -> server.TestCase - 4, // 12: remote.Loader.UpdateTestCase:input_type -> server.TestCase - 4, // 13: remote.Loader.DeleteTestCase:input_type -> server.TestCase - 5, // 14: remote.Loader.Verify:input_type -> server.Empty - 6, // 15: remote.Loader.PProf:input_type -> server.PProfRequest - 7, // 16: remote.SecretService.GetSecret:input_type -> server.Secret - 5, // 17: remote.SecretService.GetSecrets:input_type -> server.Empty - 7, // 18: remote.SecretService.CreateSecret:input_type -> server.Secret - 7, // 19: remote.SecretService.DeleteSecret:input_type -> server.Secret - 7, // 20: remote.SecretService.UpdateSecret:input_type -> server.Secret - 0, // 21: remote.Loader.ListTestSuite:output_type -> remote.TestSuites - 5, // 22: remote.Loader.CreateTestSuite:output_type -> server.Empty - 1, // 23: remote.Loader.GetTestSuite:output_type -> remote.TestSuite - 1, // 24: remote.Loader.UpdateTestSuite:output_type -> remote.TestSuite - 5, // 25: remote.Loader.DeleteTestSuite:output_type -> server.Empty - 8, // 26: remote.Loader.ListTestCases:output_type -> server.TestCases - 5, // 27: remote.Loader.CreateTestCase:output_type -> server.Empty - 4, // 28: remote.Loader.GetTestCase:output_type -> server.TestCase - 4, // 29: remote.Loader.UpdateTestCase:output_type -> server.TestCase - 5, // 30: remote.Loader.DeleteTestCase:output_type -> server.Empty - 9, // 31: remote.Loader.Verify:output_type -> server.ExtensionStatus - 10, // 32: remote.Loader.PProf:output_type -> server.PProfData - 7, // 33: remote.SecretService.GetSecret:output_type -> server.Secret - 11, // 34: remote.SecretService.GetSecrets:output_type -> server.Secrets - 12, // 35: remote.SecretService.CreateSecret:output_type -> server.CommonResult - 12, // 36: remote.SecretService.DeleteSecret:output_type -> server.CommonResult - 12, // 37: remote.SecretService.UpdateSecret:output_type -> server.CommonResult - 21, // [21:38] is the sub-list for method output_type - 4, // [4:21] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name + 4, // 1: remote.TestSuite.param:type_name -> server.Pair + 5, // 2: remote.TestSuite.spec:type_name -> server.APISpec + 6, // 3: remote.TestSuite.items:type_name -> server.TestCase + 3, // 4: remote.HistoryTestSuites.data:type_name -> remote.HistoryTestSuite + 7, // 5: remote.HistoryTestSuite.items:type_name -> server.HistoryTestCase + 8, // 6: remote.Loader.ListTestSuite:input_type -> server.Empty + 1, // 7: remote.Loader.CreateTestSuite:input_type -> remote.TestSuite + 1, // 8: remote.Loader.GetTestSuite:input_type -> remote.TestSuite + 1, // 9: remote.Loader.UpdateTestSuite:input_type -> remote.TestSuite + 1, // 10: remote.Loader.DeleteTestSuite:input_type -> remote.TestSuite + 1, // 11: remote.Loader.ListTestCases:input_type -> remote.TestSuite + 6, // 12: remote.Loader.CreateTestCase:input_type -> server.TestCase + 6, // 13: remote.Loader.GetTestCase:input_type -> server.TestCase + 6, // 14: remote.Loader.UpdateTestCase:input_type -> server.TestCase + 6, // 15: remote.Loader.DeleteTestCase:input_type -> server.TestCase + 8, // 16: remote.Loader.ListHistoryTestSuite:input_type -> server.Empty + 9, // 17: remote.Loader.CreateTestCaseHistory:input_type -> server.HistoryTestResult + 7, // 18: remote.Loader.GetHistoryTestCase:input_type -> server.HistoryTestCase + 8, // 19: remote.Loader.Verify:input_type -> server.Empty + 10, // 20: remote.Loader.PProf:input_type -> server.PProfRequest + 11, // 21: remote.SecretService.GetSecret:input_type -> server.Secret + 8, // 22: remote.SecretService.GetSecrets:input_type -> server.Empty + 11, // 23: remote.SecretService.CreateSecret:input_type -> server.Secret + 11, // 24: remote.SecretService.DeleteSecret:input_type -> server.Secret + 11, // 25: remote.SecretService.UpdateSecret:input_type -> server.Secret + 0, // 26: remote.Loader.ListTestSuite:output_type -> remote.TestSuites + 8, // 27: remote.Loader.CreateTestSuite:output_type -> server.Empty + 1, // 28: remote.Loader.GetTestSuite:output_type -> remote.TestSuite + 1, // 29: remote.Loader.UpdateTestSuite:output_type -> remote.TestSuite + 8, // 30: remote.Loader.DeleteTestSuite:output_type -> server.Empty + 12, // 31: remote.Loader.ListTestCases:output_type -> server.TestCases + 8, // 32: remote.Loader.CreateTestCase:output_type -> server.Empty + 6, // 33: remote.Loader.GetTestCase:output_type -> server.TestCase + 6, // 34: remote.Loader.UpdateTestCase:output_type -> server.TestCase + 8, // 35: remote.Loader.DeleteTestCase:output_type -> server.Empty + 2, // 36: remote.Loader.ListHistoryTestSuite:output_type -> remote.HistoryTestSuites + 8, // 37: remote.Loader.CreateTestCaseHistory:output_type -> server.Empty + 9, // 38: remote.Loader.GetHistoryTestCase:output_type -> server.HistoryTestResult + 13, // 39: remote.Loader.Verify:output_type -> server.ExtensionStatus + 14, // 40: remote.Loader.PProf:output_type -> server.PProfData + 11, // 41: remote.SecretService.GetSecret:output_type -> server.Secret + 15, // 42: remote.SecretService.GetSecrets:output_type -> server.Secrets + 16, // 43: remote.SecretService.CreateSecret:output_type -> server.CommonResult + 16, // 44: remote.SecretService.DeleteSecret:output_type -> server.CommonResult + 16, // 45: remote.SecretService.UpdateSecret:output_type -> server.CommonResult + 26, // [26:46] is the sub-list for method output_type + 6, // [6:26] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name } func init() { file_pkg_testing_remote_loader_proto_init() } diff --git a/pkg/testing/remote/loader.proto b/pkg/testing/remote/loader.proto index 93bcd1352..202eff9cf 100644 --- a/pkg/testing/remote/loader.proto +++ b/pkg/testing/remote/loader.proto @@ -21,7 +21,9 @@ service Loader { rpc ListHistoryTestSuite(server.Empty) returns (HistoryTestSuites) {} rpc CreateTestCaseHistory(server.HistoryTestResult) returns (server.Empty) {} - rpc GetHistoryTestCase(server.HistoryTestCase) returns (server.HistoryTestResult) {} + rpc GetHistoryTestCaseWithResult(server.HistoryTestCase) returns (server.HistoryTestResult) {} + rpc GetHistoryTestCase(server.HistoryTestCase) returns (server.HistoryTestCase) {} + rpc DeleteHistoryTestCase(server.HistoryTestCase) returns (server.Empty) {} rpc ListHistoryTestSuite(server.Empty) returns (HistoryTestSuites) {} rpc CreateTestCaseHistory(server.HistoryTestResult) returns (server.Empty) {} diff --git a/pkg/testing/remote/loader_grpc.pb.go b/pkg/testing/remote/loader_grpc.pb.go index d6edbec44..cae24e5a6 100644 --- a/pkg/testing/remote/loader_grpc.pb.go +++ b/pkg/testing/remote/loader_grpc.pb.go @@ -35,7 +35,9 @@ type LoaderClient interface { DeleteTestCase(ctx context.Context, in *server.TestCase, opts ...grpc.CallOption) (*server.Empty, error) ListHistoryTestSuite(ctx context.Context, in *server.Empty, opts ...grpc.CallOption) (*HistoryTestSuites, error) CreateTestCaseHistory(ctx context.Context, in *server.HistoryTestResult, opts ...grpc.CallOption) (*server.Empty, error) - GetHistoryTestCase(ctx context.Context, in *server.HistoryTestCase, opts ...grpc.CallOption) (*server.HistoryTestResult, error) + GetHistoryTestCaseWithResult(ctx context.Context, in *server.HistoryTestCase, opts ...grpc.CallOption) (*server.HistoryTestResult, error) + GetHistoryTestCase(ctx context.Context, in *server.HistoryTestCase, opts ...grpc.CallOption) (*server.HistoryTestCase, error) + DeleteHistoryTestCase(ctx context.Context, in *server.HistoryTestCase, opts ...grpc.CallOption) (*server.Empty, error) GetVersion(ctx context.Context, in *server.Empty, opts ...grpc.CallOption) (*server.Version, error) Verify(ctx context.Context, in *server.Empty, opts ...grpc.CallOption) (*server.ExtensionStatus, error) PProf(ctx context.Context, in *server.PProfRequest, opts ...grpc.CallOption) (*server.PProfData, error) @@ -139,6 +141,33 @@ func (c *loaderClient) DeleteTestCase(ctx context.Context, in *server.TestCase, return out, nil } +func (c *loaderClient) ListHistoryTestSuite(ctx context.Context, in *server.Empty, opts ...grpc.CallOption) (*HistoryTestSuites, error) { + out := new(HistoryTestSuites) + err := c.cc.Invoke(ctx, "/remote.Loader/ListHistoryTestSuite", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *loaderClient) CreateTestCaseHistory(ctx context.Context, in *server.HistoryTestResult, opts ...grpc.CallOption) (*server.Empty, error) { + out := new(server.Empty) + err := c.cc.Invoke(ctx, "/remote.Loader/CreateTestCaseHistory", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *loaderClient) GetHistoryTestCase(ctx context.Context, in *server.HistoryTestCase, opts ...grpc.CallOption) (*server.HistoryTestResult, error) { + out := new(server.HistoryTestResult) + err := c.cc.Invoke(ctx, "/remote.Loader/GetHistoryTestCase", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *loaderClient) Verify(ctx context.Context, in *server.Empty, opts ...grpc.CallOption) (*server.ExtensionStatus, error) { out := new(server.ExtensionStatus) err := c.cc.Invoke(ctx, "/remote.Loader/Verify", in, out, opts...) @@ -171,6 +200,9 @@ type LoaderServer interface { GetTestCase(context.Context, *server.TestCase) (*server.TestCase, error) UpdateTestCase(context.Context, *server.TestCase) (*server.TestCase, error) DeleteTestCase(context.Context, *server.TestCase) (*server.Empty, error) + ListHistoryTestSuite(context.Context, *server.Empty) (*HistoryTestSuites, error) + CreateTestCaseHistory(context.Context, *server.HistoryTestResult) (*server.Empty, error) + GetHistoryTestCase(context.Context, *server.HistoryTestCase) (*server.HistoryTestResult, error) Verify(context.Context, *server.Empty) (*server.ExtensionStatus, error) PProf(context.Context, *server.PProfRequest) (*server.PProfData, error) mustEmbedUnimplementedLoaderServer() @@ -210,6 +242,15 @@ func (UnimplementedLoaderServer) UpdateTestCase(context.Context, *server.TestCas func (UnimplementedLoaderServer) DeleteTestCase(context.Context, *server.TestCase) (*server.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteTestCase not implemented") } +func (UnimplementedLoaderServer) ListHistoryTestSuite(context.Context, *server.Empty) (*HistoryTestSuites, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListHistoryTestSuite not implemented") +} +func (UnimplementedLoaderServer) CreateTestCaseHistory(context.Context, *server.HistoryTestResult) (*server.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateTestCaseHistory not implemented") +} +func (UnimplementedLoaderServer) GetHistoryTestCase(context.Context, *server.HistoryTestCase) (*server.HistoryTestResult, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetHistoryTestCase not implemented") +} func (UnimplementedLoaderServer) Verify(context.Context, *server.Empty) (*server.ExtensionStatus, error) { return nil, status.Errorf(codes.Unimplemented, "method Verify not implemented") } @@ -409,6 +450,60 @@ func _Loader_DeleteTestCase_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } +func _Loader_ListHistoryTestSuite_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(server.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LoaderServer).ListHistoryTestSuite(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/remote.Loader/ListHistoryTestSuite", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LoaderServer).ListHistoryTestSuite(ctx, req.(*server.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _Loader_CreateTestCaseHistory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(server.HistoryTestResult) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LoaderServer).CreateTestCaseHistory(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/remote.Loader/CreateTestCaseHistory", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LoaderServer).CreateTestCaseHistory(ctx, req.(*server.HistoryTestResult)) + } + return interceptor(ctx, in, info, handler) +} + +func _Loader_GetHistoryTestCase_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(server.HistoryTestCase) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LoaderServer).GetHistoryTestCase(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/remote.Loader/GetHistoryTestCase", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LoaderServer).GetHistoryTestCase(ctx, req.(*server.HistoryTestCase)) + } + return interceptor(ctx, in, info, handler) +} + func _Loader_Verify_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(server.Empty) if err := dec(in); err != nil { @@ -492,6 +587,18 @@ var Loader_ServiceDesc = grpc.ServiceDesc{ MethodName: "DeleteTestCase", Handler: _Loader_DeleteTestCase_Handler, }, + { + MethodName: "ListHistoryTestSuite", + Handler: _Loader_ListHistoryTestSuite_Handler, + }, + { + MethodName: "CreateTestCaseHistory", + Handler: _Loader_CreateTestCaseHistory_Handler, + }, + { + MethodName: "GetHistoryTestCase", + Handler: _Loader_GetHistoryTestCase_Handler, + }, { MethodName: "Verify", Handler: _Loader_Verify_Handler, From 28329aff7b4375e99fac3a49bd607008557e8607 Mon Sep 17 00:00:00 2001 From: ysf <1807100869@qq.com> Date: Thu, 8 Aug 2024 12:51:45 +0800 Subject: [PATCH 03/15] feat: add history case revert api and ui --- console/atest-ui/package-lock.json | 160 +-- console/atest-ui/package.json | 5 +- console/atest-ui/src/locales/en.json | 4 +- console/atest-ui/src/locales/zh.json | 4 +- console/atest-ui/src/views/TestCase.vue | 201 +++- console/atest-ui/src/views/net.ts | 6 +- pkg/server/convert.go | 12 +- pkg/server/remote_server.go | 13 + pkg/server/server.pb.go | 1236 +++++++++++++---------- pkg/server/server.pb.gw.go | 101 ++ pkg/server/server.proto | 7 +- pkg/server/server.swagger.json | 145 +++ pkg/server/server_grpc.pb.go | 78 +- pkg/testing/loader.go | 1 + pkg/testing/loader_file.go | 4 + pkg/testing/loader_non.go | 4 + pkg/testing/remote/converter.go | 29 + pkg/testing/remote/grpc_store.go | 14 + pkg/testing/remote/loader.pb.go | 115 +++ pkg/testing/remote/loader.proto | 2 +- pkg/testing/remote/loader_grpc.pb.go | 91 ++ 21 files changed, 1577 insertions(+), 655 deletions(-) diff --git a/console/atest-ui/package-lock.json b/console/atest-ui/package-lock.json index ecf238d35..09fb49e43 100644 --- a/console/atest-ui/package-lock.json +++ b/console/atest-ui/package-lock.json @@ -8,14 +8,15 @@ "name": "atest-ui", "version": "v0.0.14", "dependencies": { - "@vueuse/core": "^10.11.0", + "codemirror": "^5.65.17", + "diff-match-patch": "^1.0.5", "element-plus": "^2.3.7", "intro.js": "^7.0.1", "jsonlint-mod": "^1.7.6", "jsonpath-plus": "^7.2.0", "skywalking-client-js": "^0.10.0", "vue": "^3.3.4", - "vue-codemirror": "^6.1.1", + "vue-codemirror": "^5.1.0", "vue-i18n": "^9.2.2", "vue-json-viewer": "^3.0.4", "vue-router": "^4.2.2" @@ -662,10 +663,9 @@ "dev": true }, "node_modules/@codemirror/autocomplete": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.11.1.tgz", - "integrity": "sha512-L5UInv8Ffd6BPw0P3EF7JLYAMeEbclY7+6Q11REt8vhih8RuLreKtPy/xk8wPxs4EQgYqzI7cdgpiYwWlbS/ow==", - "peer": true, + "version": "6.18.0", + "resolved": "https://registry.npmmirror.com/@codemirror/autocomplete/-/autocomplete-6.18.0.tgz", + "integrity": "sha512-5DbOvBbY4qW5l57cjDsmmpDh3/TeK1vXfTHa+BUMrRzdWdcxKZ4U4V7vQaTtOpApNU4kLS4FQ6cINtLg245LXA==", "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", @@ -704,10 +704,9 @@ } }, "node_modules/@codemirror/lint": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.4.2.tgz", - "integrity": "sha512-wzRkluWb1ptPKdzlsrbwwjYCPLgzU6N88YBAmlZi8WFyuiEduSd05MnJYNogzyc8rPK7pj6m95ptUApc8sHKVA==", - "peer": true, + "version": "6.8.1", + "resolved": "https://registry.npmmirror.com/@codemirror/lint/-/lint-6.8.1.tgz", + "integrity": "sha512-IZ0Y7S4/bpaunwggW2jYqwLuHj0QtESf5xcROewY6+lDNwZ/NzvR4t+vpYgg9m7V8UXLPYqG+lu3DF470E5Oxg==", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -715,10 +714,9 @@ } }, "node_modules/@codemirror/search": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.5.tgz", - "integrity": "sha512-PIEN3Ke1buPod2EHbJsoQwlbpkz30qGZKcnmH1eihq9+bPQx8gelauUwLYaY4vBOuBAuEhmpDLii4rj/uO0yMA==", - "peer": true, + "version": "6.5.6", + "resolved": "https://registry.npmmirror.com/@codemirror/search/-/search-6.5.6.tgz", + "integrity": "sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -4109,19 +4107,9 @@ } }, "node_modules/codemirror": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", - "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", - "peer": true, - "dependencies": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/commands": "^6.0.0", - "@codemirror/language": "^6.0.0", - "@codemirror/lint": "^6.0.0", - "@codemirror/search": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0" - } + "version": "5.65.17", + "resolved": "https://registry.npmmirror.com/codemirror/-/codemirror-5.65.17.tgz", + "integrity": "sha512-1zOsUx3lzAOu/gnMAZkQ9kpIHcPYOc9y1Fbm2UVk5UBPkdq380nhkelG0qUwm1f7wPvTbndu9ZYlug35EwAZRQ==" }, "node_modules/collect-v8-coverage": { "version": "1.0.2", @@ -4278,9 +4266,8 @@ }, "node_modules/crelt": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", - "peer": true + "resolved": "https://registry.npmmirror.com/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" }, "node_modules/cross-spawn": { "version": "7.0.3", @@ -4635,6 +4622,11 @@ "node": ">=8" } }, + "node_modules/diff-match-patch": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz", + "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==" + }, "node_modules/diff-sequences": { "version": "29.4.3", "resolved": "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-29.4.3.tgz", @@ -11616,20 +11608,40 @@ } }, "node_modules/vue-codemirror": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/vue-codemirror/-/vue-codemirror-6.1.1.tgz", - "integrity": "sha512-rTAYo44owd282yVxKtJtnOi7ERAcXTeviwoPXjIc6K/IQYUsoDkzPvw/JDFtSP6T7Cz/2g3EHaEyeyaQCKoDMg==", + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/vue-codemirror/-/vue-codemirror-5.1.0.tgz", + "integrity": "sha512-U8t71S8Dk+9W3Yxfwv30E3vGYjfiKOqluoKkV1bW3Mh9y/T1cQAdGLzz7pN+Z8llivX+/8CJ5sg17xLPSOsvvQ==", "dependencies": { "@codemirror/commands": "6.x", "@codemirror/language": "6.x", "@codemirror/state": "6.x", - "@codemirror/view": "6.x" + "@codemirror/view": "6.x", + "codemirror": "6.x", + "csstype": "^2.6.8" }, "peerDependencies": { - "codemirror": "6.x", "vue": "3.x" } }, + "node_modules/vue-codemirror/node_modules/codemirror": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/codemirror/-/codemirror-6.0.1.tgz", + "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, + "node_modules/vue-codemirror/node_modules/csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" + }, "node_modules/vue-component-type-helpers": { "version": "1.6.5", "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-1.6.5.tgz", @@ -12585,10 +12597,9 @@ "dev": true }, "@codemirror/autocomplete": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.11.1.tgz", - "integrity": "sha512-L5UInv8Ffd6BPw0P3EF7JLYAMeEbclY7+6Q11REt8vhih8RuLreKtPy/xk8wPxs4EQgYqzI7cdgpiYwWlbS/ow==", - "peer": true, + "version": "6.18.0", + "resolved": "https://registry.npmmirror.com/@codemirror/autocomplete/-/autocomplete-6.18.0.tgz", + "integrity": "sha512-5DbOvBbY4qW5l57cjDsmmpDh3/TeK1vXfTHa+BUMrRzdWdcxKZ4U4V7vQaTtOpApNU4kLS4FQ6cINtLg245LXA==", "requires": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", @@ -12621,10 +12632,9 @@ } }, "@codemirror/lint": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.4.2.tgz", - "integrity": "sha512-wzRkluWb1ptPKdzlsrbwwjYCPLgzU6N88YBAmlZi8WFyuiEduSd05MnJYNogzyc8rPK7pj6m95ptUApc8sHKVA==", - "peer": true, + "version": "6.8.1", + "resolved": "https://registry.npmmirror.com/@codemirror/lint/-/lint-6.8.1.tgz", + "integrity": "sha512-IZ0Y7S4/bpaunwggW2jYqwLuHj0QtESf5xcROewY6+lDNwZ/NzvR4t+vpYgg9m7V8UXLPYqG+lu3DF470E5Oxg==", "requires": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -12632,10 +12642,9 @@ } }, "@codemirror/search": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.5.tgz", - "integrity": "sha512-PIEN3Ke1buPod2EHbJsoQwlbpkz30qGZKcnmH1eihq9+bPQx8gelauUwLYaY4vBOuBAuEhmpDLii4rj/uO0yMA==", - "peer": true, + "version": "6.5.6", + "resolved": "https://registry.npmmirror.com/@codemirror/search/-/search-6.5.6.tgz", + "integrity": "sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==", "requires": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -15209,19 +15218,9 @@ "dev": true }, "codemirror": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", - "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", - "peer": true, - "requires": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/commands": "^6.0.0", - "@codemirror/language": "^6.0.0", - "@codemirror/lint": "^6.0.0", - "@codemirror/search": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0" - } + "version": "5.65.17", + "resolved": "https://registry.npmmirror.com/codemirror/-/codemirror-5.65.17.tgz", + "integrity": "sha512-1zOsUx3lzAOu/gnMAZkQ9kpIHcPYOc9y1Fbm2UVk5UBPkdq380nhkelG0qUwm1f7wPvTbndu9ZYlug35EwAZRQ==" }, "collect-v8-coverage": { "version": "1.0.2", @@ -15365,9 +15364,8 @@ }, "crelt": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", - "peer": true + "resolved": "https://registry.npmmirror.com/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" }, "cross-spawn": { "version": "7.0.3", @@ -15651,6 +15649,11 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, + "diff-match-patch": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz", + "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==" + }, "diff-sequences": { "version": "29.4.3", "resolved": "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-29.4.3.tgz", @@ -21041,14 +21044,37 @@ } }, "vue-codemirror": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/vue-codemirror/-/vue-codemirror-6.1.1.tgz", - "integrity": "sha512-rTAYo44owd282yVxKtJtnOi7ERAcXTeviwoPXjIc6K/IQYUsoDkzPvw/JDFtSP6T7Cz/2g3EHaEyeyaQCKoDMg==", + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/vue-codemirror/-/vue-codemirror-5.1.0.tgz", + "integrity": "sha512-U8t71S8Dk+9W3Yxfwv30E3vGYjfiKOqluoKkV1bW3Mh9y/T1cQAdGLzz7pN+Z8llivX+/8CJ5sg17xLPSOsvvQ==", "requires": { "@codemirror/commands": "6.x", "@codemirror/language": "6.x", "@codemirror/state": "6.x", - "@codemirror/view": "6.x" + "@codemirror/view": "6.x", + "codemirror": "6.x", + "csstype": "^2.6.8" + }, + "dependencies": { + "codemirror": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/codemirror/-/codemirror-6.0.1.tgz", + "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", + "requires": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, + "csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" + } } }, "vue-component-type-helpers": { diff --git a/console/atest-ui/package.json b/console/atest-ui/package.json index 652f21338..0778c3765 100644 --- a/console/atest-ui/package.json +++ b/console/atest-ui/package.json @@ -16,14 +16,15 @@ "test": "vitest" }, "dependencies": { - "@vueuse/core": "^10.11.0", + "codemirror": "^5.65.17", + "diff-match-patch": "^1.0.5", "element-plus": "^2.3.7", "intro.js": "^7.0.1", "jsonlint-mod": "^1.7.6", "jsonpath-plus": "^7.2.0", "skywalking-client-js": "^0.10.0", "vue": "^3.3.4", - "vue-codemirror": "^6.1.1", + "vue-codemirror": "^5.1.0", "vue-i18n": "^9.2.2", "vue-json-viewer": "^3.0.4", "vue-router": "^4.2.2" diff --git a/console/atest-ui/src/locales/en.json b/console/atest-ui/src/locales/en.json index edd55174d..49f181d35 100644 --- a/console/atest-ui/src/locales/en.json +++ b/console/atest-ui/src/locales/en.json @@ -22,7 +22,9 @@ "generateCode": "Generate Code", "sendWithParam": "Send With Parameter", "fullScreen": "Full Screen", - "cancelFullScreen": "Cancel Full Screen" + "cancelFullScreen": "Cancel Full Screen", + "viewHistory": "View History Test Case Result", + "revert": "Revert" }, "title": { "createTestSuite": "Create Test Suite", diff --git a/console/atest-ui/src/locales/zh.json b/console/atest-ui/src/locales/zh.json index 93e7a6557..a5415b202 100644 --- a/console/atest-ui/src/locales/zh.json +++ b/console/atest-ui/src/locales/zh.json @@ -22,7 +22,9 @@ "generateCode": "生成代码", "sendWithParam": "参数化", "fullScreen": "全屏显示", - "cancelFullScreen": "取消全屏" + "cancelFullScreen": "取消全屏", + "viewHistory": "查看历史记录", + "revert": "回退" }, "title": { "createTestSuite": "创建测试用例集", diff --git a/console/atest-ui/src/views/TestCase.vue b/console/atest-ui/src/views/TestCase.vue index e94a8420d..dc6f3c650 100644 --- a/console/atest-ui/src/views/TestCase.vue +++ b/console/atest-ui/src/views/TestCase.vue @@ -1,5 +1,5 @@ @@ -872,6 +875,7 @@ Magic.Keys(() => { v-model="scope.row.value" :fetch-suggestions="queryHeaderValues" style="width: 100%;" + :readonly="isHistoryTestCase" />
@@ -889,13 +893,14 @@ Magic.Keys(() => { @@ -922,17 +927,18 @@ Magic.Keys(() => {
+ v-model="testCaseWithSuite.data.request.body" + :disabled="isHistoryTestCase"/> @@ -955,6 +961,7 @@ Magic.Keys(() => { class="w-50 m-2" placeholder="Please input" style="width: 200px" + :readonly="isHistoryTestCase" /> { :autosize="{ minRows: 4, maxRows: 8 }" type="textarea" placeholder="Expected Body" + :readonly="isHistoryTestCase" /> @@ -973,13 +981,14 @@ Magic.Keys(() => { v-model="scope.row.key" placeholder="Key" @change="expectedHeaderChange" + :readonly="isHistoryTestCase" /> @@ -996,13 +1005,14 @@ Magic.Keys(() => { clearable placeholder="Key" @change="bodyFiledExpectChange" + :readonly="isHistoryTestCase" /> @@ -1011,7 +1021,7 @@ Magic.Keys(() => {
- +
@@ -1020,6 +1030,7 @@ Magic.Keys(() => { v-model="testCaseWithSuite.data.response.schema" :autosize="{ minRows: 4, maxRows: 20 }" type="textarea" + :readonly="isHistoryTestCase" /> diff --git a/pkg/server/remote_server.go b/pkg/server/remote_server.go index 1bf2058d0..b62094e6f 100644 --- a/pkg/server/remote_server.go +++ b/pkg/server/remote_server.go @@ -273,6 +273,21 @@ func (s *server) Run(ctx context.Context, task *TestTask) (reply *TestResult, er fmt.Fprintln(buf, reply.Error) } reply.Message = buf.String() + // create history record + go func() { + loader := s.getLoader(ctx) + defer loader.Close() + for _, testCaseResult := range reply.TestCaseResult { + for i, item := range suite.Items { + suite.Items[i].Request.API = fmt.Sprintf("%s/%s", suite.API, item.Request.API) + } + err = loader.CreateHistoryTestCase(ToNormalTestCaseResult(testCaseResult), suite) + if err != nil { + remoteServerLogger.Info("error create history") + } + } + }() + return } @@ -548,7 +563,6 @@ func (s *server) GetHistoryTestCase(ctx context.Context, in *HistoryTestCase) (r return } -<<<<<<< HEAD var ExecutionCountNum = promauto.NewCounter(prometheus.CounterOpts{ Name: "atest_execution_count", Help: "The total number of request execution", @@ -649,20 +663,6 @@ func (s *server) RunTestCase(ctx context.Context, in *TestCaseIdentity) (result result.Header = lastItem.Header result.StatusCode = lastItem.StatusCode } - - normalResult := ToNormalTestCaseResult(result) - var testSuite *testing.TestSuite - if testSuite, err = s.getSuiteFromTestTask(task); err != nil { - result = &TestCaseResult{ - Error: err.Error(), - } - } - err = loader.CreateHistoryTestCase(normalResult, testSuite) - if err != nil { - result = &TestCaseResult{ - Error: err.Error(), - } - } } return } From 9635ef8e48ff73d93c31c5cccf12c7a5618c6fc8 Mon Sep 17 00:00:00 2001 From: ysf <1807100869@qq.com> Date: Sun, 8 Sep 2024 20:14:13 +0800 Subject: [PATCH 09/15] feat: handle big response --- console/atest-ui/src/views/TestCase.vue | 46 +- console/atest-ui/src/views/net.ts | 40 +- pkg/server/remote_server.go | 62 ++ pkg/server/server.pb.go | 770 +++++++++++++----------- pkg/server/server.pb.gw.go | 232 ++++--- pkg/server/server.proto | 12 + pkg/server/server.swagger.json | 290 ++++----- pkg/server/server_grpc.pb.go | 72 +-- 8 files changed, 835 insertions(+), 689 deletions(-) diff --git a/console/atest-ui/src/views/TestCase.vue b/console/atest-ui/src/views/TestCase.vue index e072b2949..6e3ee6d9b 100644 --- a/console/atest-ui/src/views/TestCase.vue +++ b/console/atest-ui/src/views/TestCase.vue @@ -98,8 +98,11 @@ const handleTestResult = (e) => { if (!isHistoryTestCase.value) { handleTestResultError(e) } + const isFilePath = e.body.startsWith("isFilePath-") - if (e.body !== '') { + if(isFilePath){ + isResponseFile.value = true + } else if(e.body !== ''){ testResult.value.bodyObject = JSON.parse(e.body); testResult.value.originBodyObject = JSON.parse(e.body); } @@ -312,6 +315,33 @@ function determineBodyType(e) { }); } +const isResponseFile = ref(false) +function downloadResponseFile(){ + API.DownloadResponseFile({ + body: testResult.value.body + }, (e) => { + if (e && e.data) { + try { + const bytes = atob(e.data); + const blob = new Blob([bytes], { type: 'mimeType' }); + const link = document.createElement('a'); + link.href = window.URL.createObjectURL(blob); + link.download = e.filename.substring("isFilePath-".length); + + document.body.appendChild(link); + link.click(); + + window.URL.revokeObjectURL(link.href); + document.body.removeChild(link); + } catch (error) { + console.error('Error during file download:', error); + } + } else { + console.error('No data to download.'); + } + }) +} + function setDefaultValues(e) { if (e.request.method === '') { e.request.method = 'GET' @@ -1157,10 +1187,20 @@ Magic.Keys(() => {
- +
- + +
+ + +
Response body is too large, please download to view.
+
+ + Download + +
+
diff --git a/console/atest-ui/src/views/net.ts b/console/atest-ui/src/views/net.ts index 2bd5fc15d..9fc3b5d2f 100644 --- a/console/atest-ui/src/views/net.ts +++ b/console/atest-ui/src/views/net.ts @@ -622,12 +622,50 @@ function DeleteAllHistoryTestCase(suiteName: string, caseName: string, .then(callback).catch(errHandle) } +function GetTestCaseAllHistory(req: TestCase, + callback: (d: any) => void, errHandle?: (e: any) => void | null) { + const requestOptions = { + method: 'POST', + headers: { + 'X-Store-Name': Cache.GetCurrentStore().name, + 'X-Auth': getToken() + }, + body: JSON.stringify({ + suiteName: req.suiteName, + name: req.name + }) + } + fetch(`/api/v1/suites/${req.suiteName}/cases/${req.name}`, requestOptions) + .then(DefaultResponseProcess) + .then(callback).catch(errHandle) +} + +function DownloadResponseFile(testcase, + callback: (d: any) => void, errHandle?: (e: any) => void | null) { + const requestOptions = { + method: 'POST', + headers: { + 'X-Store-Name': Cache.GetCurrentStore().name, + 'X-Auth': getToken() + }, + body: JSON.stringify({ + response: { + body: testcase.body, + } + }) + } + fetch(`/api/v1/downloadFile/${testcase.body}`, requestOptions) + .then(DefaultResponseProcess) + .then(callback).catch(errHandle) +} + + export const API = { DefaultResponseProcess, GetVersion, CreateTestSuite, UpdateTestSuite, ImportTestSuite, GetTestSuite, DeleteTestSuite, ConvertTestSuite,GetTestSuiteYaml, CreateTestCase, UpdateTestCase, GetTestCase, ListTestCase, DeleteTestCase, RunTestCase, - GetHistoryTestCaseWithResult, DeleteHistoryTestCase, GetHistoryTestCase, GetTestCaseAllHistory, DeleteAllHistoryTestCase, + GetHistoryTestCaseWithResult, DeleteHistoryTestCase,GetHistoryTestCase, GetTestCaseAllHistory, DeleteAllHistoryTestCase, DownloadResponseFile, GenerateCode, ListCodeGenerator, PopularHeaders, CreateOrUpdateStore, GetStores, DeleteStore, VerifyStore, diff --git a/pkg/server/remote_server.go b/pkg/server/remote_server.go index b62094e6f..bddb0f148 100644 --- a/pkg/server/remote_server.go +++ b/pkg/server/remote_server.go @@ -22,8 +22,10 @@ import ( "errors" "fmt" "io" + "mime" "net/http" "os" + "path/filepath" reflect "reflect" "regexp" "strings" @@ -252,6 +254,7 @@ func (s *server) Run(ctx context.Context, task *TestTask) (reply *TestResult, er output, testErr := suiteRunner.RunTestCase(&testCase, dataContext, ctx) if getter, ok := suiteRunner.(runner.ResponseRecord); ok { resp := getter.GetResponseRecord() + resp, err = handleLargeResponseBody(resp, suite.Name, testCase.Name) reply.TestCaseResult = append(reply.TestCaseResult, &TestCaseResult{ StatusCode: int32(resp.StatusCode), Body: resp.Body, @@ -291,6 +294,65 @@ func (s *server) Run(ctx context.Context, task *TestTask) (reply *TestResult, er return } +func handleLargeResponseBody(resp runner.SimpleResponse, suite string, caseName string) (reply runner.SimpleResponse, err error) { + const maxSize = 1024 + prefix := "isFilePath-" + strings.Join([]string{suite, caseName}, "-") + + if len(resp.Body) > maxSize { + tmpFile, err := os.CreateTemp("", prefix+"-") + defer tmpFile.Close() + if err != nil { + return resp, fmt.Errorf("failed to create file: %w", err) + } + + if _, err = tmpFile.Write([]byte(resp.Body)); err != nil { + return resp, fmt.Errorf("failed to write response body to file: %w", err) + } + absFilePath, err := filepath.Abs(tmpFile.Name()) + if err != nil { + return resp, fmt.Errorf("failed to get absolute file path: %w", err) + } + resp.Body = filepath.Base(absFilePath) + return resp, nil + } + return resp, nil +} + +func (s *server) DownloadResponseFile(ctx context.Context, in *TestCase) (reply *FileData, err error) { + if in.Response != nil { + tempFileName := in.Response.Body + if tempFileName == "" { + return nil, errors.New("file name is empty") + } + + tempDir := os.TempDir() + filePath := filepath.Join(tempDir, tempFileName) + if filepath.Clean(filePath) != filepath.Join(tempDir, filepath.Base(tempFileName)) { + return nil, errors.New("invalid file path") + } + + fileContent, err := os.ReadFile(filePath) + if err != nil { + return nil, fmt.Errorf("failed to read file: %s", filePath) + } + + mimeType := mime.TypeByExtension(filepath.Ext(filePath)) + if mimeType == "" { + mimeType = "application/octet-stream" + } + + reply = &FileData{ + Data: fileContent, + ContentType: mimeType, + Filename: filepath.Base(filePath), + } + + return reply, nil + } else { + return reply, errors.New("response is empty") + } +} + func (s *server) RunTestSuite(srv Runner_RunTestSuiteServer) (err error) { ctx := srv.Context() for { diff --git a/pkg/server/server.pb.go b/pkg/server/server.pb.go index f52761271..9fafaf5fe 100644 --- a/pkg/server/server.pb.go +++ b/pkg/server/server.pb.go @@ -2952,6 +2952,69 @@ func (x *PProfData) GetData() []byte { return nil } +type FileData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + ContentType string `protobuf:"bytes,2,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` + Filename string `protobuf:"bytes,3,opt,name=filename,proto3" json:"filename,omitempty"` +} + +func (x *FileData) Reset() { + *x = FileData{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_server_server_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileData) ProtoMessage() {} + +func (x *FileData) ProtoReflect() protoreflect.Message { + mi := &file_pkg_server_server_proto_msgTypes[46] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileData.ProtoReflect.Descriptor instead. +func (*FileData) Descriptor() ([]byte, []int) { + return file_pkg_server_server_proto_rawDescGZIP(), []int{46} +} + +func (x *FileData) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +func (x *FileData) GetContentType() string { + if x != nil { + return x.ContentType + } + return "" +} + +func (x *FileData) GetFilename() string { + if x != nil { + return x.Filename + } + return "" +} + type Empty struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2961,7 +3024,7 @@ type Empty struct { func (x *Empty) Reset() { *x = Empty{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[46] + mi := &file_pkg_server_server_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2974,7 +3037,7 @@ func (x *Empty) String() string { func (*Empty) ProtoMessage() {} func (x *Empty) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[46] + mi := &file_pkg_server_server_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2987,7 +3050,7 @@ func (x *Empty) ProtoReflect() protoreflect.Message { // Deprecated: Use Empty.ProtoReflect.Descriptor instead. func (*Empty) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{46} + return file_pkg_server_server_proto_rawDescGZIP(), []int{47} } type MockConfig struct { @@ -3002,7 +3065,7 @@ type MockConfig struct { func (x *MockConfig) Reset() { *x = MockConfig{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[47] + mi := &file_pkg_server_server_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3015,7 +3078,7 @@ func (x *MockConfig) String() string { func (*MockConfig) ProtoMessage() {} func (x *MockConfig) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[47] + mi := &file_pkg_server_server_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3028,7 +3091,7 @@ func (x *MockConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use MockConfig.ProtoReflect.Descriptor instead. func (*MockConfig) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{47} + return file_pkg_server_server_proto_rawDescGZIP(), []int{48} } func (x *MockConfig) GetPrefix() string { @@ -3058,7 +3121,7 @@ type Version struct { func (x *Version) Reset() { *x = Version{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_server_server_proto_msgTypes[48] + mi := &file_pkg_server_server_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3071,7 +3134,7 @@ func (x *Version) String() string { func (*Version) ProtoMessage() {} func (x *Version) ProtoReflect() protoreflect.Message { - mi := &file_pkg_server_server_proto_msgTypes[48] + mi := &file_pkg_server_server_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3084,7 +3147,7 @@ func (x *Version) ProtoReflect() protoreflect.Message { // Deprecated: Use Version.ProtoReflect.Descriptor instead. func (*Version) Descriptor() ([]byte, []int) { - return file_pkg_server_server_proto_rawDescGZIP(), []int{48} + return file_pkg_server_server_proto_rawDescGZIP(), []int{49} } func (x *Version) GetVersion() string { @@ -3445,304 +3508,310 @@ var file_pkg_server_server_proto_rawDesc = []byte{ 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1f, 0x0a, 0x09, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3c, 0x0a, 0x0a, 0x4d, 0x6f, 0x63, 0x6b, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, - 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x4f, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x65, 0x32, 0xbd, 0x21, 0x0a, 0x06, 0x52, 0x75, 0x6e, 0x6e, - 0x65, 0x72, 0x12, 0x43, 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x1a, 0x12, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, - 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x75, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x5f, 0x0a, 0x0c, 0x52, 0x75, 0x6e, 0x54, 0x65, - 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x2f, 0x73, 0x75, 0x69, 0x74, - 0x65, 0x3a, 0x01, 0x2a, 0x28, 0x01, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, - 0x75, 0x69, 0x74, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x75, - 0x69, 0x74, 0x65, 0x73, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x0f, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, - 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, - 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x19, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x5f, 0x0a, 0x0f, 0x49, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x1d, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x17, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, - 0x74, 0x65, 0x73, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x5b, 0x0a, 0x0c, 0x47, 0x65, - 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, - 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, - 0x12, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x5a, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x12, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, - 0x79, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x1a, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x3a, 0x01, 0x2a, 0x12, 0x5f, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, + 0x5d, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x07, + 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3c, 0x0a, 0x0a, 0x4d, 0x6f, 0x63, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, 0x0a, + 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x4f, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x65, 0x32, 0xb9, 0x21, 0x0a, 0x06, 0x52, 0x75, 0x6e, 0x6e, 0x65, + 0x72, 0x12, 0x43, 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x16, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x72, 0x75, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x5f, 0x0a, 0x0c, 0x52, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x15, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x7b, 0x0a, 0x12, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x44, 0x75, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, - 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x75, 0x69, 0x74, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x3a, 0x01, - 0x2a, 0x12, 0x63, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, - 0x65, 0x59, 0x61, 0x6d, 0x6c, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, + 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, + 0x3a, 0x01, 0x2a, 0x28, 0x01, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x75, + 0x69, 0x74, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x69, + 0x74, 0x65, 0x73, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x0f, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x19, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, + 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x19, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, + 0x75, 0x69, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x5f, 0x0a, 0x0f, 0x49, 0x6d, 0x70, 0x6f, + 0x72, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x17, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, + 0x65, 0x73, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x5b, 0x0a, 0x0c, 0x47, 0x65, 0x74, + 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, + 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, + 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x5a, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x12, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x1a, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, + 0x01, 0x2a, 0x12, 0x5f, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, + 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x59, 0x61, 0x6d, 0x6c, 0x44, 0x61, - 0x74, 0x61, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x79, 0x61, 0x6d, 0x6c, 0x12, 0x5d, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x69, 0x74, 0x65, - 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, - 0x63, 0x61, 0x73, 0x65, 0x73, 0x12, 0x74, 0x0a, 0x0b, 0x52, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, - 0x43, 0x61, 0x73, 0x65, 0x12, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, - 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x16, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x2b, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, - 0x73, 0x75, 0x69, 0x74, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, - 0x73, 0x74, 0x63, 0x61, 0x73, 0x65, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x12, 0x6a, 0x0a, 0x0b, 0x47, - 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x18, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, - 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, - 0x73, 0x75, 0x69, 0x74, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, - 0x73, 0x74, 0x63, 0x61, 0x73, 0x65, 0x7d, 0x12, 0x6c, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x53, - 0x75, 0x69, 0x74, 0x65, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, - 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, - 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, - 0x2f, 0x7b, 0x73, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, - 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x78, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, - 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x53, 0x75, 0x69, - 0x74, 0x65, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, - 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x1a, 0x2c, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, - 0x73, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, 0x65, 0x73, - 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, - 0x6f, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, - 0x65, 0x12, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, - 0x61, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, - 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x2a, 0x27, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x75, 0x69, 0x74, 0x65, 0x7d, 0x2f, - 0x63, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x73, 0x74, 0x63, 0x61, 0x73, 0x65, 0x7d, - 0x12, 0x90, 0x01, 0x0a, 0x11, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, + 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x15, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x12, 0x7b, 0x0a, 0x12, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x44, 0x75, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, + 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2f, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, + 0x73, 0x2f, 0x7b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, + 0x12, 0x63, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, + 0x59, 0x61, 0x6d, 0x6c, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, + 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, + 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x59, 0x61, 0x6d, 0x6c, 0x44, 0x61, 0x74, + 0x61, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x2f, 0x79, 0x61, 0x6d, 0x6c, 0x12, 0x5d, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, + 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, + 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x69, 0x74, 0x65, 0x22, + 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, + 0x61, 0x73, 0x65, 0x73, 0x12, 0x74, 0x0a, 0x0b, 0x52, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x43, + 0x61, 0x73, 0x65, 0x12, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, + 0x74, 0x43, 0x61, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x16, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x2b, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, + 0x75, 0x69, 0x74, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x73, + 0x74, 0x63, 0x61, 0x73, 0x65, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x12, 0x6a, 0x0a, 0x0b, 0x47, 0x65, + 0x74, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, + 0x74, 0x43, 0x61, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, + 0x75, 0x69, 0x74, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x73, + 0x74, 0x63, 0x61, 0x73, 0x65, 0x7d, 0x12, 0x6c, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x53, 0x75, + 0x69, 0x74, 0x65, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, + 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, + 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, + 0x7b, 0x73, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, 0x65, + 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x78, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x53, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x22, 0x41, 0x2f, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x1a, 0x2c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, - 0x63, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x61, 0x73, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x3a, 0x01, 0x2a, 0x12, 0x5f, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x41, 0x50, 0x49, 0x73, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, - 0x43, 0x61, 0x73, 0x65, 0x73, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x41, 0x50, 0x49, 0x73, 0x12, 0x57, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, - 0x72, 0x79, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x22, 0x1d, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x12, 0x82, 0x01, - 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, - 0x43, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x17, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, - 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, - 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2f, 0x7b, 0x49, - 0x44, 0x7d, 0x12, 0x6c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, - 0x65, 0x1a, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, - 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x68, 0x69, 0x73, 0x74, - 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x2f, 0x7b, 0x49, 0x44, 0x7d, - 0x12, 0x6a, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, - 0x73, 0x65, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, - 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x2a, 0x1c, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, - 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x2f, 0x7b, 0x49, 0x44, 0x7d, 0x12, 0x7c, 0x0a, 0x18, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, + 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2f, + 0x7b, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x6f, + 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, + 0x12, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, + 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x2f, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x2a, 0x27, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x75, 0x69, 0x74, 0x65, 0x7d, 0x2f, 0x63, + 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x73, 0x74, 0x63, 0x61, 0x73, 0x65, 0x7d, 0x12, + 0x90, 0x01, 0x0a, 0x11, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, + 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, + 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x22, 0x41, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x53, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, + 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x61, 0x73, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x3a, + 0x01, 0x2a, 0x12, 0x5f, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x41, 0x50, 0x49, 0x73, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, + 0x61, 0x73, 0x65, 0x73, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, + 0x50, 0x49, 0x73, 0x12, 0x57, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x22, 0x1d, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x68, + 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, 0x12, 0x82, 0x01, 0x0a, + 0x1c, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, + 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x17, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, + 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, + 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2f, 0x7b, 0x49, 0x44, + 0x7d, 0x12, 0x6c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, + 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, + 0x1a, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1e, 0x12, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x2f, 0x7b, 0x49, 0x44, 0x7d, 0x12, + 0x6a, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x2a, 0x2b, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, - 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2f, - 0x7b, 0x63, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x6f, 0x0a, 0x12, 0x52, 0x75, - 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, - 0x12, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, - 0x73, 0x65, 0x2f, 0x7b, 0x49, 0x44, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x12, 0x74, 0x0a, 0x15, 0x47, - 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x41, 0x6c, 0x6c, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, - 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x73, - 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x27, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x75, 0x69, 0x74, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x12, 0x56, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, - 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x6d, 0x0a, 0x0c, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2a, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x4e, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, - 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x72, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x1a, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x72, 0x73, 0x12, 0x6c, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, - 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x4e, 0x0a, 0x0e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, - 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x4f, 0x0a, 0x0e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0d, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x19, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5e, 0x0a, 0x14, 0x46, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, - 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, - 0x69, 0x72, 0x73, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x28, 0x01, 0x30, 0x01, 0x12, 0x45, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x43, - 0x0a, 0x06, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x16, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, - 0x69, 0x6e, 0x64, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x73, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, - 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, - 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x73, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x3a, 0x01, - 0x2a, 0x12, 0x4d, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x1a, - 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x20, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x1a, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, - 0x12, 0x4a, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, - 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x0d, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x1d, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x5d, 0x0a, 0x0b, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x13, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x1a, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x73, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x45, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x11, 0x12, 0x0f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x73, 0x12, 0x50, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, - 0x22, 0x0f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x54, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x18, 0x2a, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x57, 0x0a, 0x0c, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x1a, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x4e, 0x61, 0x6d, 0x65, 0x7d, - 0x3a, 0x01, 0x2a, 0x12, 0x32, 0x0a, 0x05, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x12, 0x14, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x50, 0x72, 0x6f, - 0x66, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x32, 0x6b, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x6e, 0x65, - 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x03, 0x52, 0x75, - 0x6e, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, - 0x75, 0x69, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x72, 0x75, - 0x6e, 0x3a, 0x01, 0x2a, 0x32, 0xa0, 0x01, 0x0a, 0x04, 0x4d, 0x6f, 0x63, 0x6b, 0x12, 0x4b, 0x0a, - 0x06, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x0d, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x18, 0x22, 0x13, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x63, 0x6b, - 0x2f, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x4b, 0x0a, 0x09, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x2a, 0x1c, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, + 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x2f, 0x7b, 0x49, 0x44, 0x7d, 0x12, 0x7c, 0x0a, 0x18, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, + 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, + 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x2a, 0x2b, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x75, + 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, + 0x63, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x74, 0x0a, 0x15, 0x47, 0x65, 0x74, + 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x41, 0x6c, 0x6c, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, + 0x43, 0x61, 0x73, 0x65, 0x1a, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x73, 0x22, 0x2f, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x27, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x75, 0x69, 0x74, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x7d, 0x2f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, + 0x56, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, + 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, + 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x6d, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x64, 0x65, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x4e, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x72, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x15, 0x12, 0x13, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x63, 0x6b, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x73, 0x75, 0x72, 0x65, 0x6e, - 0x2f, 0x61, 0x70, 0x69, 0x2d, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x6b, 0x67, - 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x14, 0x12, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x76, + 0x65, 0x72, 0x74, 0x65, 0x72, 0x73, 0x12, 0x6c, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x25, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x4e, 0x0a, 0x0e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, + 0x61, 0x69, 0x72, 0x73, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x12, 0x4f, 0x0a, 0x0e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x13, 0x12, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5e, 0x0a, 0x14, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x13, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, + 0x73, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x28, 0x01, 0x30, 0x01, 0x12, 0x45, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x06, + 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, + 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x12, 0x6b, 0x0a, 0x14, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x10, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x64, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x2f, 0x7b, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x50, + 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x73, 0x12, + 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, + 0x64, 0x73, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x6b, 0x69, 0x6e, 0x64, 0x73, + 0x12, 0x42, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x0d, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0e, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x22, 0x16, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x4d, 0x0a, 0x0b, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1a, 0x1a, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x4a, 0x0a, 0x0b, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, + 0x2a, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, + 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x5d, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x79, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x17, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x76, 0x65, 0x72, + 0x69, 0x66, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x45, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x50, 0x0a, + 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, + 0x54, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, + 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, + 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x16, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, 0x7b, + 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x57, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x21, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1b, 0x1a, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x32, + 0x0a, 0x05, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x12, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, + 0x22, 0x00, 0x32, 0x6b, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, 0x19, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x57, + 0x69, 0x74, 0x68, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x20, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x72, 0x75, 0x6e, 0x3a, 0x01, 0x2a, 0x32, + 0xa0, 0x01, 0x0a, 0x04, 0x4d, 0x6f, 0x63, 0x6b, 0x12, 0x4b, 0x0a, 0x06, 0x52, 0x65, 0x6c, 0x6f, + 0x61, 0x64, 0x12, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x63, 0x6b, 0x2f, 0x72, 0x65, 0x6c, 0x6f, + 0x61, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x4b, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x63, 0x6b, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x73, 0x75, 0x72, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2d, + 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3757,7 +3826,7 @@ func file_pkg_server_server_proto_rawDescGZIP() []byte { return file_pkg_server_server_proto_rawDescData } -var file_pkg_server_server_proto_msgTypes = make([]protoimpl.MessageInfo, 52) +var file_pkg_server_server_proto_msgTypes = make([]protoimpl.MessageInfo, 53) var file_pkg_server_server_proto_goTypes = []interface{}{ (*Suites)(nil), // 0: server.Suites (*Items)(nil), // 1: server.Items @@ -3805,17 +3874,18 @@ var file_pkg_server_server_proto_goTypes = []interface{}{ (*ExtensionStatus)(nil), // 43: server.ExtensionStatus (*PProfRequest)(nil), // 44: server.PProfRequest (*PProfData)(nil), // 45: server.PProfData - (*Empty)(nil), // 46: server.Empty - (*MockConfig)(nil), // 47: server.MockConfig - (*Version)(nil), // 48: server.Version - nil, // 49: server.Suites.DataEntry - nil, // 50: server.HistorySuites.DataEntry - nil, // 51: server.TestTask.EnvEntry - (*timestamppb.Timestamp)(nil), // 52: google.protobuf.Timestamp + (*FileData)(nil), // 46: server.FileData + (*Empty)(nil), // 47: server.Empty + (*MockConfig)(nil), // 48: server.MockConfig + (*Version)(nil), // 49: server.Version + nil, // 50: server.Suites.DataEntry + nil, // 51: server.HistorySuites.DataEntry + nil, // 52: server.TestTask.EnvEntry + (*timestamppb.Timestamp)(nil), // 53: google.protobuf.Timestamp } var file_pkg_server_server_proto_depIdxs = []int32{ - 49, // 0: server.Suites.data:type_name -> server.Suites.DataEntry - 50, // 1: server.HistorySuites.data:type_name -> server.HistorySuites.DataEntry + 50, // 0: server.Suites.data:type_name -> server.Suites.DataEntry + 51, // 1: server.HistorySuites.data:type_name -> server.HistorySuites.DataEntry 4, // 2: server.HistoryItems.data:type_name -> server.HistoryCaseIdentity 30, // 3: server.TestCaseIdentity.parameters:type_name -> server.Pair 30, // 4: server.TestSuite.param:type_name -> server.Pair @@ -3824,18 +3894,18 @@ var file_pkg_server_server_proto_depIdxs = []int32{ 23, // 7: server.TestSuiteWithCase.case:type_name -> server.TestCase 11, // 8: server.APISpec.rpc:type_name -> server.RPC 10, // 9: server.APISpec.secure:type_name -> server.Secure - 51, // 10: server.TestTask.env:type_name -> server.TestTask.EnvEntry + 52, // 10: server.TestTask.env:type_name -> server.TestTask.EnvEntry 30, // 11: server.TestTask.parameters:type_name -> server.Pair 29, // 12: server.TestResult.testCaseResult:type_name -> server.TestCaseResult 29, // 13: server.HistoryTestResult.testCaseResult:type_name -> server.TestCaseResult 24, // 14: server.HistoryTestResult.data:type_name -> server.HistoryTestCase - 52, // 15: server.HistoryTestResult.createTime:type_name -> google.protobuf.Timestamp + 53, // 15: server.HistoryTestResult.createTime:type_name -> google.protobuf.Timestamp 23, // 16: server.Suite.items:type_name -> server.TestCase 23, // 17: server.TestCaseWithSuite.data:type_name -> server.TestCase 23, // 18: server.TestCases.data:type_name -> server.TestCase 26, // 19: server.TestCase.request:type_name -> server.Request 27, // 20: server.TestCase.response:type_name -> server.Response - 52, // 21: server.HistoryTestCase.createTime:type_name -> google.protobuf.Timestamp + 53, // 21: server.HistoryTestCase.createTime:type_name -> google.protobuf.Timestamp 30, // 22: server.HistoryTestCase.suiteParam:type_name -> server.Pair 9, // 23: server.HistoryTestCase.suiteSpec:type_name -> server.APISpec 26, // 24: server.HistoryTestCase.request:type_name -> server.Request @@ -3860,7 +3930,7 @@ var file_pkg_server_server_proto_depIdxs = []int32{ 3, // 43: server.HistorySuites.DataEntry.value:type_name -> server.HistoryItems 15, // 44: server.Runner.Run:input_type -> server.TestTask 12, // 45: server.Runner.RunTestSuite:input_type -> server.TestSuiteIdentity - 46, // 46: server.Runner.GetSuites:input_type -> server.Empty + 47, // 46: server.Runner.GetSuites:input_type -> server.Empty 12, // 47: server.Runner.CreateTestSuite:input_type -> server.TestSuiteIdentity 6, // 48: server.Runner.ImportTestSuite:input_type -> server.TestSuiteSource 12, // 49: server.Runner.GetTestSuite:input_type -> server.TestSuiteIdentity @@ -3876,36 +3946,36 @@ var file_pkg_server_server_proto_depIdxs = []int32{ 5, // 59: server.Runner.DeleteTestCase:input_type -> server.TestCaseIdentity 14, // 60: server.Runner.DuplicateTestCase:input_type -> server.TestCaseDuplicate 12, // 61: server.Runner.GetSuggestedAPIs:input_type -> server.TestSuiteIdentity - 46, // 62: server.Runner.GetHistorySuites:input_type -> server.Empty + 47, // 62: server.Runner.GetHistorySuites:input_type -> server.Empty 24, // 63: server.Runner.GetHistoryTestCaseWithResult:input_type -> server.HistoryTestCase 24, // 64: server.Runner.GetHistoryTestCase:input_type -> server.HistoryTestCase 24, // 65: server.Runner.DeleteHistoryTestCase:input_type -> server.HistoryTestCase 24, // 66: server.Runner.DeleteAllHistoryTestCase:input_type -> server.HistoryTestCase - 24, // 67: server.Runner.RunHistoryTestCase:input_type -> server.HistoryTestCase - 23, // 68: server.Runner.GetTestCaseAllHistory:input_type -> server.TestCase - 46, // 69: server.Runner.ListCodeGenerator:input_type -> server.Empty - 40, // 70: server.Runner.GenerateCode:input_type -> server.CodeGenerateRequest - 46, // 71: server.Runner.ListConverter:input_type -> server.Empty - 40, // 72: server.Runner.ConvertTestSuite:input_type -> server.CodeGenerateRequest - 46, // 73: server.Runner.PopularHeaders:input_type -> server.Empty - 32, // 74: server.Runner.FunctionsQuery:input_type -> server.SimpleQuery - 32, // 75: server.Runner.FunctionsQueryStream:input_type -> server.SimpleQuery - 46, // 76: server.Runner.GetVersion:input_type -> server.Empty - 46, // 77: server.Runner.Sample:input_type -> server.Empty - 46, // 78: server.Runner.GetStoreKinds:input_type -> server.Empty - 46, // 79: server.Runner.GetStores:input_type -> server.Empty + 23, // 67: server.Runner.GetTestCaseAllHistory:input_type -> server.TestCase + 47, // 68: server.Runner.ListCodeGenerator:input_type -> server.Empty + 40, // 69: server.Runner.GenerateCode:input_type -> server.CodeGenerateRequest + 47, // 70: server.Runner.ListConverter:input_type -> server.Empty + 40, // 71: server.Runner.ConvertTestSuite:input_type -> server.CodeGenerateRequest + 47, // 72: server.Runner.PopularHeaders:input_type -> server.Empty + 32, // 73: server.Runner.FunctionsQuery:input_type -> server.SimpleQuery + 32, // 74: server.Runner.FunctionsQueryStream:input_type -> server.SimpleQuery + 47, // 75: server.Runner.GetVersion:input_type -> server.Empty + 47, // 76: server.Runner.Sample:input_type -> server.Empty + 23, // 77: server.Runner.DownloadResponseFile:input_type -> server.TestCase + 47, // 78: server.Runner.GetStoreKinds:input_type -> server.Empty + 47, // 79: server.Runner.GetStores:input_type -> server.Empty 34, // 80: server.Runner.CreateStore:input_type -> server.Store 34, // 81: server.Runner.UpdateStore:input_type -> server.Store 34, // 82: server.Runner.DeleteStore:input_type -> server.Store 32, // 83: server.Runner.VerifyStore:input_type -> server.SimpleQuery - 46, // 84: server.Runner.GetSecrets:input_type -> server.Empty + 47, // 84: server.Runner.GetSecrets:input_type -> server.Empty 42, // 85: server.Runner.CreateSecret:input_type -> server.Secret 42, // 86: server.Runner.DeleteSecret:input_type -> server.Secret 42, // 87: server.Runner.UpdateSecret:input_type -> server.Secret 44, // 88: server.Runner.PProf:input_type -> server.PProfRequest 8, // 89: server.RunnerExtension.Run:input_type -> server.TestSuiteWithCase - 47, // 90: server.Mock.Reload:input_type -> server.MockConfig - 46, // 91: server.Mock.GetConfig:input_type -> server.Empty + 48, // 90: server.Mock.Reload:input_type -> server.MockConfig + 47, // 91: server.Mock.GetConfig:input_type -> server.Empty 16, // 92: server.Runner.Run:output_type -> server.TestResult 16, // 93: server.Runner.RunTestSuite:output_type -> server.TestResult 0, // 94: server.Runner.GetSuites:output_type -> server.Suites @@ -3929,17 +3999,17 @@ var file_pkg_server_server_proto_depIdxs = []int32{ 24, // 112: server.Runner.GetHistoryTestCase:output_type -> server.HistoryTestCase 18, // 113: server.Runner.DeleteHistoryTestCase:output_type -> server.HelloReply 18, // 114: server.Runner.DeleteAllHistoryTestCase:output_type -> server.HelloReply - 29, // 115: server.Runner.RunHistoryTestCase:output_type -> server.TestCaseResult - 25, // 116: server.Runner.GetTestCaseAllHistory:output_type -> server.HistoryTestCases - 38, // 117: server.Runner.ListCodeGenerator:output_type -> server.SimpleList - 37, // 118: server.Runner.GenerateCode:output_type -> server.CommonResult - 38, // 119: server.Runner.ListConverter:output_type -> server.SimpleList - 37, // 120: server.Runner.ConvertTestSuite:output_type -> server.CommonResult - 31, // 121: server.Runner.PopularHeaders:output_type -> server.Pairs - 31, // 122: server.Runner.FunctionsQuery:output_type -> server.Pairs - 31, // 123: server.Runner.FunctionsQueryStream:output_type -> server.Pairs - 48, // 124: server.Runner.GetVersion:output_type -> server.Version - 18, // 125: server.Runner.Sample:output_type -> server.HelloReply + 25, // 115: server.Runner.GetTestCaseAllHistory:output_type -> server.HistoryTestCases + 38, // 116: server.Runner.ListCodeGenerator:output_type -> server.SimpleList + 37, // 117: server.Runner.GenerateCode:output_type -> server.CommonResult + 38, // 118: server.Runner.ListConverter:output_type -> server.SimpleList + 37, // 119: server.Runner.ConvertTestSuite:output_type -> server.CommonResult + 31, // 120: server.Runner.PopularHeaders:output_type -> server.Pairs + 31, // 121: server.Runner.FunctionsQuery:output_type -> server.Pairs + 31, // 122: server.Runner.FunctionsQueryStream:output_type -> server.Pairs + 49, // 123: server.Runner.GetVersion:output_type -> server.Version + 18, // 124: server.Runner.Sample:output_type -> server.HelloReply + 46, // 125: server.Runner.DownloadResponseFile:output_type -> server.FileData 35, // 126: server.Runner.GetStoreKinds:output_type -> server.StoreKinds 33, // 127: server.Runner.GetStores:output_type -> server.Stores 34, // 128: server.Runner.CreateStore:output_type -> server.Store @@ -3952,8 +4022,8 @@ var file_pkg_server_server_proto_depIdxs = []int32{ 37, // 135: server.Runner.UpdateSecret:output_type -> server.CommonResult 45, // 136: server.Runner.PProf:output_type -> server.PProfData 37, // 137: server.RunnerExtension.Run:output_type -> server.CommonResult - 46, // 138: server.Mock.Reload:output_type -> server.Empty - 47, // 139: server.Mock.GetConfig:output_type -> server.MockConfig + 47, // 138: server.Mock.Reload:output_type -> server.Empty + 48, // 139: server.Mock.GetConfig:output_type -> server.MockConfig 92, // [92:140] is the sub-list for method output_type 44, // [44:92] is the sub-list for method input_type 44, // [44:44] is the sub-list for extension type_name @@ -4520,7 +4590,7 @@ func file_pkg_server_server_proto_init() { } } file_pkg_server_server_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Empty); i { + switch v := v.(*FileData); i { case 0: return &v.state case 1: @@ -4532,7 +4602,7 @@ func file_pkg_server_server_proto_init() { } } file_pkg_server_server_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MockConfig); i { + switch v := v.(*Empty); i { case 0: return &v.state case 1: @@ -4544,6 +4614,18 @@ func file_pkg_server_server_proto_init() { } } file_pkg_server_server_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MockConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_server_server_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Version); i { case 0: return &v.state @@ -4562,7 +4644,7 @@ func file_pkg_server_server_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_server_server_proto_rawDesc, NumEnums: 0, - NumMessages: 52, + NumMessages: 53, NumExtensions: 0, NumServices: 3, }, diff --git a/pkg/server/server.pb.gw.go b/pkg/server/server.pb.gw.go index ccf67ab1b..31e31cb71 100644 --- a/pkg/server/server.pb.gw.go +++ b/pkg/server/server.pb.gw.go @@ -1424,76 +1424,6 @@ func local_request_Runner_DeleteAllHistoryTestCase_0(ctx context.Context, marsha } -var ( - filter_Runner_RunHistoryTestCase_0 = &utilities.DoubleArray{Encoding: map[string]int{"ID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_Runner_RunHistoryTestCase_0(ctx context.Context, marshaler runtime.Marshaler, client RunnerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq HistoryTestCase - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["ID"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "ID") - } - - protoReq.ID, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "ID", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Runner_RunHistoryTestCase_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.RunHistoryTestCase(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Runner_RunHistoryTestCase_0(ctx context.Context, marshaler runtime.Marshaler, server RunnerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq HistoryTestCase - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["ID"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "ID") - } - - protoReq.ID, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "ID", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Runner_RunHistoryTestCase_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.RunHistoryTestCase(ctx, &protoReq) - return msg, metadata, err - -} - var ( filter_Runner_GetTestCaseAllHistory_0 = &utilities.DoubleArray{Encoding: map[string]int{"suiteName": 0, "name": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} ) @@ -1805,6 +1735,66 @@ func local_request_Runner_Sample_0(ctx context.Context, marshaler runtime.Marsha } +func request_Runner_DownloadResponseFile_0(ctx context.Context, marshaler runtime.Marshaler, client RunnerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq TestCase + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["response.body"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "response.body") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "response.body", val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "response.body", err) + } + + msg, err := client.DownloadResponseFile(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Runner_DownloadResponseFile_0(ctx context.Context, marshaler runtime.Marshaler, server RunnerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq TestCase + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["response.body"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "response.body") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "response.body", val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "response.body", err) + } + + msg, err := server.DownloadResponseFile(ctx, &protoReq) + return msg, metadata, err + +} + func request_Runner_GetStoreKinds_0(ctx context.Context, marshaler runtime.Marshaler, client RunnerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq Empty var metadata runtime.ServerMetadata @@ -2856,31 +2846,6 @@ func RegisterRunnerHandlerServer(ctx context.Context, mux *runtime.ServeMux, ser }) - mux.Handle("POST", pattern_Runner_RunHistoryTestCase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/server.Runner/RunHistoryTestCase", runtime.WithHTTPPathPattern("/api/v1/historyTestCase/{ID}/run")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Runner_RunHistoryTestCase_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_Runner_RunHistoryTestCase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("POST", pattern_Runner_GetTestCaseAllHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3113,6 +3078,31 @@ func RegisterRunnerHandlerServer(ctx context.Context, mux *runtime.ServeMux, ser }) + mux.Handle("POST", pattern_Runner_DownloadResponseFile_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/server.Runner/DownloadResponseFile", runtime.WithHTTPPathPattern("/api/v1/downloadFile/{response.body}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Runner_DownloadResponseFile_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Runner_DownloadResponseFile_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Runner_GetStoreKinds_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -4028,28 +4018,6 @@ func RegisterRunnerHandlerClient(ctx context.Context, mux *runtime.ServeMux, cli }) - mux.Handle("POST", pattern_Runner_RunHistoryTestCase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/server.Runner/RunHistoryTestCase", runtime.WithHTTPPathPattern("/api/v1/historyTestCase/{ID}/run")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Runner_RunHistoryTestCase_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_Runner_RunHistoryTestCase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("POST", pattern_Runner_GetTestCaseAllHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -4270,6 +4238,28 @@ func RegisterRunnerHandlerClient(ctx context.Context, mux *runtime.ServeMux, cli }) + mux.Handle("POST", pattern_Runner_DownloadResponseFile_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/server.Runner/DownloadResponseFile", runtime.WithHTTPPathPattern("/api/v1/downloadFile/{response.body}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Runner_DownloadResponseFile_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Runner_DownloadResponseFile_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Runner_GetStoreKinds_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -4562,8 +4552,6 @@ var ( pattern_Runner_DeleteAllHistoryTestCase_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "suites", "suiteName", "cases", "caseName"}, "")) - pattern_Runner_RunHistoryTestCase_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "historyTestCase", "ID", "run"}, "")) - pattern_Runner_GetTestCaseAllHistory_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "suites", "suiteName", "cases", "name"}, "")) pattern_Runner_ListCodeGenerator_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "codeGenerators"}, "")) @@ -4584,6 +4572,8 @@ var ( pattern_Runner_Sample_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "sample"}, "")) + pattern_Runner_DownloadResponseFile_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "downloadFile", "response.body"}, "")) + pattern_Runner_GetStoreKinds_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "stores", "kinds"}, "")) pattern_Runner_GetStores_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "stores"}, "")) @@ -4654,8 +4644,6 @@ var ( forward_Runner_DeleteAllHistoryTestCase_0 = runtime.ForwardResponseMessage - forward_Runner_RunHistoryTestCase_0 = runtime.ForwardResponseMessage - forward_Runner_GetTestCaseAllHistory_0 = runtime.ForwardResponseMessage forward_Runner_ListCodeGenerator_0 = runtime.ForwardResponseMessage @@ -4676,6 +4664,8 @@ var ( forward_Runner_Sample_0 = runtime.ForwardResponseMessage + forward_Runner_DownloadResponseFile_0 = runtime.ForwardResponseMessage + forward_Runner_GetStoreKinds_0 = runtime.ForwardResponseMessage forward_Runner_GetStores_0 = runtime.ForwardResponseMessage diff --git a/pkg/server/server.proto b/pkg/server/server.proto index f12fae042..de2820d2a 100644 --- a/pkg/server/server.proto +++ b/pkg/server/server.proto @@ -204,6 +204,12 @@ service Runner { }; } + rpc DownloadResponseFile(TestCase) returns (FileData) { + option (google.api.http) = { + post: "/api/v1/downloadFile/{response.body}" + body: "*" + }; + } // stores related interfaces rpc GetStoreKinds(Empty) returns (StoreKinds) { option (google.api.http) = { @@ -558,6 +564,12 @@ message PProfData { bytes data = 1; } +message FileData { + bytes data = 1; + string content_type = 2; + string filename = 3; +} + message Empty { } diff --git a/pkg/server/server.swagger.json b/pkg/server/server.swagger.json index 3e337603a..3f903910e 100644 --- a/pkg/server/server.swagger.json +++ b/pkg/server/server.swagger.json @@ -132,6 +132,44 @@ ] } }, + "/api/v1/downloadFile/{response.body}": { + "post": { + "operationId": "Runner_DownloadResponseFile", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/serverFileData" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "response.body", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/RunnerDownloadResponseFileBody" + } + } + ], + "tags": [ + "Runner" + ] + } + }, "/api/v1/extension/run": { "post": { "operationId": "RunnerExtension_Run", @@ -622,190 +660,6 @@ ] } }, - "/api/v1/historyTestCase/{ID}/run": { - "post": { - "operationId": "Runner_RunHistoryTestCase", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/serverTestCaseResult" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "parameters": [ - { - "name": "ID", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "caseName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "suiteName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "historySuiteName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "createTime", - "in": "query", - "required": false, - "type": "string", - "format": "date-time" - }, - { - "name": "suiteSpec.kind", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "suiteSpec.url", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "suiteSpec.rpc.import", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "suiteSpec.rpc.serverReflection", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "suiteSpec.rpc.protofile", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "suiteSpec.rpc.protoset", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "suiteSpec.rpc.raw", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "suiteSpec.secure.insecure", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "suiteSpec.secure.cert", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "suiteSpec.secure.ca", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "suiteSpec.secure.serverName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "suiteSpec.secure.key", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "suiteApi", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "request.api", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "request.method", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "request.body", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "response.statusCode", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "response.body", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "response.verify", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "response.schema", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Runner" - ] - } - }, "/api/v1/historyTestCaseWithResult/{ID}": { "get": { "operationId": "Runner_GetHistoryTestCaseWithResult", @@ -2477,6 +2331,59 @@ } } }, + "RunnerDownloadResponseFileBody": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "suiteName": { + "type": "string" + }, + "request": { + "$ref": "#/definitions/serverRequest" + }, + "response": { + "type": "object", + "properties": { + "statusCode": { + "type": "integer", + "format": "int32" + }, + "header": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/serverPair" + } + }, + "bodyFieldsExpect": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/serverPair" + } + }, + "verify": { + "type": "array", + "items": { + "type": "string" + } + }, + "ConditionalVerify": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/serverConditionalVerify" + } + }, + "schema": { + "type": "string" + } + } + } + } + }, "RunnerDuplicateTestCaseBody": { "type": "object", "properties": { @@ -2690,6 +2597,21 @@ } } }, + "serverFileData": { + "type": "object", + "properties": { + "data": { + "type": "string", + "format": "byte" + }, + "contentType": { + "type": "string" + }, + "filename": { + "type": "string" + } + } + }, "serverHelloReply": { "type": "object", "properties": { diff --git a/pkg/server/server_grpc.pb.go b/pkg/server/server_grpc.pb.go index 906f1655c..60dd9da19 100644 --- a/pkg/server/server_grpc.pb.go +++ b/pkg/server/server_grpc.pb.go @@ -50,7 +50,6 @@ type RunnerClient interface { GetHistoryTestCase(ctx context.Context, in *HistoryTestCase, opts ...grpc.CallOption) (*HistoryTestCase, error) DeleteHistoryTestCase(ctx context.Context, in *HistoryTestCase, opts ...grpc.CallOption) (*HelloReply, error) DeleteAllHistoryTestCase(ctx context.Context, in *HistoryTestCase, opts ...grpc.CallOption) (*HelloReply, error) - RunHistoryTestCase(ctx context.Context, in *HistoryTestCase, opts ...grpc.CallOption) (*TestCaseResult, error) GetTestCaseAllHistory(ctx context.Context, in *TestCase, opts ...grpc.CallOption) (*HistoryTestCases, error) // code generator ListCodeGenerator(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*SimpleList, error) @@ -64,6 +63,7 @@ type RunnerClient interface { FunctionsQueryStream(ctx context.Context, opts ...grpc.CallOption) (Runner_FunctionsQueryStreamClient, error) GetVersion(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Version, error) Sample(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*HelloReply, error) + DownloadResponseFile(ctx context.Context, in *TestCase, opts ...grpc.CallOption) (*FileData, error) // stores related interfaces GetStoreKinds(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StoreKinds, error) GetStores(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Stores, error) @@ -317,15 +317,6 @@ func (c *runnerClient) DeleteAllHistoryTestCase(ctx context.Context, in *History return out, nil } -func (c *runnerClient) RunHistoryTestCase(ctx context.Context, in *HistoryTestCase, opts ...grpc.CallOption) (*TestCaseResult, error) { - out := new(TestCaseResult) - err := c.cc.Invoke(ctx, "/server.Runner/RunHistoryTestCase", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *runnerClient) GetTestCaseAllHistory(ctx context.Context, in *TestCase, opts ...grpc.CallOption) (*HistoryTestCases, error) { out := new(HistoryTestCases) err := c.cc.Invoke(ctx, "/server.Runner/GetTestCaseAllHistory", in, out, opts...) @@ -438,6 +429,15 @@ func (c *runnerClient) Sample(ctx context.Context, in *Empty, opts ...grpc.CallO return out, nil } +func (c *runnerClient) DownloadResponseFile(ctx context.Context, in *TestCase, opts ...grpc.CallOption) (*FileData, error) { + out := new(FileData) + err := c.cc.Invoke(ctx, "/server.Runner/DownloadResponseFile", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *runnerClient) GetStoreKinds(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StoreKinds, error) { out := new(StoreKinds) err := c.cc.Invoke(ctx, "/server.Runner/GetStoreKinds", in, out, opts...) @@ -569,7 +569,6 @@ type RunnerServer interface { GetHistoryTestCase(context.Context, *HistoryTestCase) (*HistoryTestCase, error) DeleteHistoryTestCase(context.Context, *HistoryTestCase) (*HelloReply, error) DeleteAllHistoryTestCase(context.Context, *HistoryTestCase) (*HelloReply, error) - RunHistoryTestCase(context.Context, *HistoryTestCase) (*TestCaseResult, error) GetTestCaseAllHistory(context.Context, *TestCase) (*HistoryTestCases, error) // code generator ListCodeGenerator(context.Context, *Empty) (*SimpleList, error) @@ -583,6 +582,7 @@ type RunnerServer interface { FunctionsQueryStream(Runner_FunctionsQueryStreamServer) error GetVersion(context.Context, *Empty) (*Version, error) Sample(context.Context, *Empty) (*HelloReply, error) + DownloadResponseFile(context.Context, *TestCase) (*FileData, error) // stores related interfaces GetStoreKinds(context.Context, *Empty) (*StoreKinds, error) GetStores(context.Context, *Empty) (*Stores, error) @@ -673,9 +673,6 @@ func (UnimplementedRunnerServer) DeleteHistoryTestCase(context.Context, *History func (UnimplementedRunnerServer) DeleteAllHistoryTestCase(context.Context, *HistoryTestCase) (*HelloReply, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteAllHistoryTestCase not implemented") } -func (UnimplementedRunnerServer) RunHistoryTestCase(context.Context, *HistoryTestCase) (*TestCaseResult, error) { - return nil, status.Errorf(codes.Unimplemented, "method RunHistoryTestCase not implemented") -} func (UnimplementedRunnerServer) GetTestCaseAllHistory(context.Context, *TestCase) (*HistoryTestCases, error) { return nil, status.Errorf(codes.Unimplemented, "method GetTestCaseAllHistory not implemented") } @@ -706,6 +703,9 @@ func (UnimplementedRunnerServer) GetVersion(context.Context, *Empty) (*Version, func (UnimplementedRunnerServer) Sample(context.Context, *Empty) (*HelloReply, error) { return nil, status.Errorf(codes.Unimplemented, "method Sample not implemented") } +func (UnimplementedRunnerServer) DownloadResponseFile(context.Context, *TestCase) (*FileData, error) { + return nil, status.Errorf(codes.Unimplemented, "method DownloadResponseFile not implemented") +} func (UnimplementedRunnerServer) GetStoreKinds(context.Context, *Empty) (*StoreKinds, error) { return nil, status.Errorf(codes.Unimplemented, "method GetStoreKinds not implemented") } @@ -1174,24 +1174,6 @@ func _Runner_DeleteAllHistoryTestCase_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } -func _Runner_RunHistoryTestCase_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(HistoryTestCase) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RunnerServer).RunHistoryTestCase(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/server.Runner/RunHistoryTestCase", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RunnerServer).RunHistoryTestCase(ctx, req.(*HistoryTestCase)) - } - return interceptor(ctx, in, info, handler) -} - func _Runner_GetTestCaseAllHistory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(TestCase) if err := dec(in); err != nil { @@ -1380,6 +1362,24 @@ func _Runner_Sample_Handler(srv interface{}, ctx context.Context, dec func(inter return interceptor(ctx, in, info, handler) } +func _Runner_DownloadResponseFile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(TestCase) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RunnerServer).DownloadResponseFile(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/server.Runner/DownloadResponseFile", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RunnerServer).DownloadResponseFile(ctx, req.(*TestCase)) + } + return interceptor(ctx, in, info, handler) +} + func _Runner_GetStoreKinds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(Empty) if err := dec(in); err != nil { @@ -1673,10 +1673,6 @@ var Runner_ServiceDesc = grpc.ServiceDesc{ MethodName: "DeleteAllHistoryTestCase", Handler: _Runner_DeleteAllHistoryTestCase_Handler, }, - { - MethodName: "RunHistoryTestCase", - Handler: _Runner_RunHistoryTestCase_Handler, - }, { MethodName: "GetTestCaseAllHistory", Handler: _Runner_GetTestCaseAllHistory_Handler, @@ -1713,6 +1709,10 @@ var Runner_ServiceDesc = grpc.ServiceDesc{ MethodName: "Sample", Handler: _Runner_Sample_Handler, }, + { + MethodName: "DownloadResponseFile", + Handler: _Runner_DownloadResponseFile_Handler, + }, { MethodName: "GetStoreKinds", Handler: _Runner_GetStoreKinds_Handler, From c89659ced20debbc4cb5e3e95f6685be8e39ae0e Mon Sep 17 00:00:00 2001 From: ysf <1807100869@qq.com> Date: Mon, 9 Sep 2024 16:45:16 +0800 Subject: [PATCH 10/15] fix: history record generate code --- console/atest-ui/src/views/TestCase.vue | 48 ++- console/atest-ui/src/views/net.ts | 27 +- pkg/server/remote_server.go | 25 ++ pkg/server/server.pb.go | 401 +++++++++++++----------- pkg/server/server.pb.gw.go | 77 +++++ pkg/server/server.proto | 7 + pkg/server/server.swagger.json | 35 +++ pkg/server/server_grpc.pb.go | 36 +++ pkg/testing/remote/converter.go | 3 +- 9 files changed, 448 insertions(+), 211 deletions(-) diff --git a/console/atest-ui/src/views/TestCase.vue b/console/atest-ui/src/views/TestCase.vue index 6e3ee6d9b..87b966713 100644 --- a/console/atest-ui/src/views/TestCase.vue +++ b/console/atest-ui/src/views/TestCase.vue @@ -160,22 +160,40 @@ function sendRequestWithParameter() { function generateCode() { const name = props.name const suite = props.suite + const ID = props.historyCaseID + if (isHistoryTestCase.value == true){ + API.HistoryGenerateCode({ + ID: ID, + generator: currentCodeGenerator.value + }, (e) => { + ElMessage({ + message: 'Code generated!', + type: 'success' + }) + if (currentCodeGenerator.value === "gRPCPayload") { + currentCodeContent.value = JSON.stringify(JSON.parse(e.message), null, 4) + } else { + currentCodeContent.value = e.message + } + }, UIAPI.ErrorTip) + } else{ + API.GenerateCode({ + suiteName: suite, + name: name, + generator: currentCodeGenerator.value + }, (e) => { + ElMessage({ + message: 'Code generated!', + type: 'success' + }) + if (currentCodeGenerator.value === "gRPCPayload") { + currentCodeContent.value = JSON.stringify(JSON.parse(e.message), null, 4) + } else { + currentCodeContent.value = e.message + } + }, UIAPI.ErrorTip) + } - API.GenerateCode({ - suiteName: suite, - name: name, - generator: currentCodeGenerator.value - }, (e) => { - ElMessage({ - message: 'Code generated!', - type: 'success' - }) - if (currentCodeGenerator.value === "gRPCPayload") { - currentCodeContent.value = JSON.stringify(JSON.parse(e.message), null, 4) - } else { - currentCodeContent.value = e.message - } - }, UIAPI.ErrorTip) } function copyCode() { diff --git a/console/atest-ui/src/views/net.ts b/console/atest-ui/src/views/net.ts index 9fc3b5d2f..82c970a1e 100644 --- a/console/atest-ui/src/views/net.ts +++ b/console/atest-ui/src/views/net.ts @@ -326,6 +326,7 @@ interface GenerateRequest { suiteName: string name: string generator: string + id: string } function GenerateCode(request: GenerateRequest, @@ -337,9 +338,9 @@ function GenerateCode(request: GenerateRequest, 'X-Auth': getToken() }, body: JSON.stringify({ - TestSuite: request.suiteName, - TestCase: request.name, - Generator: request.generator + TestSuite: request.suiteName, + TestCase: request.name, + Generator: request.generator }) } fetch(`/api/v1/codeGenerators/generate`, requestOptions) @@ -347,6 +348,24 @@ function GenerateCode(request: GenerateRequest, .then(callback).catch(errHandle) } +function HistoryGenerateCode(request: GenerateRequest, + callback: (d: any) => void, errHandle?: (e: any) => void | null) { + const requestOptions = { + method: 'POST', + headers: { + 'X-Store-Name': Cache.GetCurrentStore().name, + 'X-Auth': getToken() + }, + body: JSON.stringify({ + ID: request.ID, + Generator: request.generator + }) + } + fetch(`/api/v1/codeGenerators/history/generate`, requestOptions) + .then(DefaultResponseProcess) + .then(callback).catch(errHandle) +} + function ListCodeGenerator(callback: (d: any) => void, errHandle?: (e: any) => void | null) { fetch('/api/v1/codeGenerators', { headers: { @@ -666,7 +685,7 @@ export const API = { CreateTestSuite, UpdateTestSuite, ImportTestSuite, GetTestSuite, DeleteTestSuite, ConvertTestSuite,GetTestSuiteYaml, CreateTestCase, UpdateTestCase, GetTestCase, ListTestCase, DeleteTestCase, RunTestCase, GetHistoryTestCaseWithResult, DeleteHistoryTestCase,GetHistoryTestCase, GetTestCaseAllHistory, DeleteAllHistoryTestCase, DownloadResponseFile, - GenerateCode, ListCodeGenerator, + GenerateCode, ListCodeGenerator, HistoryGenerateCode, PopularHeaders, CreateOrUpdateStore, GetStores, DeleteStore, VerifyStore, FunctionsQuery, diff --git a/pkg/server/remote_server.go b/pkg/server/remote_server.go index bddb0f148..d0cb08a00 100644 --- a/pkg/server/remote_server.go +++ b/pkg/server/remote_server.go @@ -898,6 +898,31 @@ func (s *server) GenerateCode(ctx context.Context, in *CodeGenerateRequest) (rep return } +func (s *server) HistoryGenerateCode(ctx context.Context, in *CodeGenerateRequest) (reply *CommonResult, err error) { + reply = &CommonResult{} + instance := generator.GetCodeGenerator(in.Generator) + if instance == nil { + reply.Success = false + reply.Message = fmt.Sprintf("generator '%s' not found", in.Generator) + } else { + loader := s.getLoader(ctx) + var result testing.HistoryTestCase + result, err = loader.GetHistoryTestCase(in.ID) + var testCase testing.TestCase + var suite testing.TestSuite + testCase = result.Data + suite.Name = result.SuiteName + suite.API = result.SuiteAPI + suite.Spec = result.SuiteSpec + suite.Param = result.SuiteParam + + output, genErr := instance.Generate(&suite, &testCase) + reply.Success = genErr == nil + reply.Message = util.OrErrorMessage(genErr, output) + } + return +} + // converter func (s *server) ListConverter(ctx context.Context, in *Empty) (reply *SimpleList, err error) { reply = &SimpleList{} diff --git a/pkg/server/server.pb.go b/pkg/server/server.pb.go index 9fafaf5fe..293fcd189 100644 --- a/pkg/server/server.pb.go +++ b/pkg/server/server.pb.go @@ -2622,6 +2622,7 @@ type CodeGenerateRequest struct { TestSuite string `protobuf:"bytes,1,opt,name=TestSuite,proto3" json:"TestSuite,omitempty"` TestCase string `protobuf:"bytes,2,opt,name=TestCase,proto3" json:"TestCase,omitempty"` Generator string `protobuf:"bytes,3,opt,name=Generator,proto3" json:"Generator,omitempty"` + ID string `protobuf:"bytes,4,opt,name=ID,proto3" json:"ID,omitempty"` } func (x *CodeGenerateRequest) Reset() { @@ -2677,6 +2678,13 @@ func (x *CodeGenerateRequest) GetGenerator() string { return "" } +func (x *CodeGenerateRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + type Secrets struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3480,14 +3488,15 @@ var file_pkg_server_server_proto_rawDesc = []byte{ 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x20, 0x0a, 0x0a, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6d, 0x0a, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x7d, 0x0a, 0x13, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x2d, 0x0a, 0x07, + 0x09, 0x52, 0x09, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, + 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x22, 0x2d, 0x0a, 0x07, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x54, 0x0a, 0x06, 0x53, @@ -3523,7 +3532,7 @@ var file_pkg_server_server_proto_rawDesc = []byte{ 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x65, 0x32, 0xb9, 0x21, 0x0a, 0x06, 0x52, 0x75, 0x6e, 0x6e, 0x65, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x65, 0x32, 0xb7, 0x22, 0x0a, 0x06, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x16, @@ -3694,124 +3703,132 @@ var file_pkg_server_server_proto_rawDesc = []byte{ 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x4e, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x72, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x14, 0x12, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x74, 0x65, 0x72, 0x73, 0x12, 0x6c, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x74, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x25, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x4e, 0x0a, 0x0e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, - 0x61, 0x69, 0x72, 0x73, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x12, 0x4f, 0x0a, 0x0e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x12, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5e, 0x0a, 0x14, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x13, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, - 0x73, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x28, 0x01, 0x30, 0x01, 0x12, 0x45, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x06, - 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, - 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x12, 0x6b, 0x0a, 0x14, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x10, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x64, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x2f, 0x7b, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x50, - 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x73, 0x12, - 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, - 0x64, 0x73, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x6b, 0x69, 0x6e, 0x64, 0x73, - 0x12, 0x42, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x0d, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0e, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x22, 0x16, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x4d, 0x0a, 0x0b, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1a, 0x1a, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x4a, 0x0a, 0x0b, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, - 0x2a, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x5d, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x79, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x17, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x76, 0x65, 0x72, - 0x69, 0x66, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x45, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x73, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x50, 0x0a, - 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, + 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x7c, 0x0a, 0x13, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x22, 0x27, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, + 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x4e, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x76, + 0x65, 0x72, 0x74, 0x65, 0x72, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, + 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, + 0x12, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x6c, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x54, + 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x25, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x3a, + 0x01, 0x2a, 0x12, 0x4e, 0x0a, 0x0e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, + 0x72, 0x73, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x12, 0x4f, 0x0a, 0x0e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, + 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, + 0x12, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x5e, 0x0a, 0x14, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x13, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, + 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x28, + 0x01, 0x30, 0x01, 0x12, 0x45, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x06, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x6c, + 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, + 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, + 0x6b, 0x0a, 0x14, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2f, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x50, 0x0a, 0x0d, + 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x73, 0x12, 0x0d, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x73, + 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x12, 0x42, + 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0e, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x73, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, + 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x4d, 0x0a, 0x0b, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x1a, + 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x4a, 0x0a, 0x0b, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x15, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x5d, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x12, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x69, + 0x6d, 0x70, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, + 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x45, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x73, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x50, 0x0a, 0x0c, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x54, 0x0a, + 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, - 0x54, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, - 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, - 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x16, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, 0x7b, - 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x57, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x21, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1b, 0x1a, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x32, - 0x0a, 0x05, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x12, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, - 0x22, 0x00, 0x32, 0x6b, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, 0x19, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x57, - 0x69, 0x74, 0x68, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x20, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x72, 0x75, 0x6e, 0x3a, 0x01, 0x2a, 0x32, - 0xa0, 0x01, 0x0a, 0x04, 0x4d, 0x6f, 0x63, 0x6b, 0x12, 0x4b, 0x0a, 0x06, 0x52, 0x65, 0x6c, 0x6f, - 0x61, 0x64, 0x12, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x63, 0x6b, 0x2f, 0x72, 0x65, 0x6c, 0x6f, - 0x61, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x4b, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x63, 0x6b, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x73, 0x75, 0x72, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2d, - 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x75, 0x6c, 0x74, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x16, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x4e, 0x61, + 0x6d, 0x65, 0x7d, 0x12, 0x57, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1b, 0x1a, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x73, 0x2f, 0x7b, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x32, 0x0a, 0x05, + 0x50, 0x50, 0x72, 0x6f, 0x66, 0x12, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, + 0x50, 0x72, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x50, 0x72, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, + 0x32, 0x6b, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x57, 0x69, 0x74, + 0x68, 0x43, 0x61, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x20, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x72, 0x75, 0x6e, 0x3a, 0x01, 0x2a, 0x32, 0xa0, 0x01, + 0x0a, 0x04, 0x4d, 0x6f, 0x63, 0x6b, 0x12, 0x4b, 0x0a, 0x06, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, + 0x12, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x63, 0x6b, 0x2f, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, + 0x3a, 0x01, 0x2a, 0x12, 0x4b, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x0d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x63, 0x6b, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, + 0x69, 0x6e, 0x75, 0x78, 0x73, 0x75, 0x72, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2d, 0x74, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3954,78 +3971,80 @@ var file_pkg_server_server_proto_depIdxs = []int32{ 23, // 67: server.Runner.GetTestCaseAllHistory:input_type -> server.TestCase 47, // 68: server.Runner.ListCodeGenerator:input_type -> server.Empty 40, // 69: server.Runner.GenerateCode:input_type -> server.CodeGenerateRequest - 47, // 70: server.Runner.ListConverter:input_type -> server.Empty - 40, // 71: server.Runner.ConvertTestSuite:input_type -> server.CodeGenerateRequest - 47, // 72: server.Runner.PopularHeaders:input_type -> server.Empty - 32, // 73: server.Runner.FunctionsQuery:input_type -> server.SimpleQuery - 32, // 74: server.Runner.FunctionsQueryStream:input_type -> server.SimpleQuery - 47, // 75: server.Runner.GetVersion:input_type -> server.Empty - 47, // 76: server.Runner.Sample:input_type -> server.Empty - 23, // 77: server.Runner.DownloadResponseFile:input_type -> server.TestCase - 47, // 78: server.Runner.GetStoreKinds:input_type -> server.Empty - 47, // 79: server.Runner.GetStores:input_type -> server.Empty - 34, // 80: server.Runner.CreateStore:input_type -> server.Store - 34, // 81: server.Runner.UpdateStore:input_type -> server.Store - 34, // 82: server.Runner.DeleteStore:input_type -> server.Store - 32, // 83: server.Runner.VerifyStore:input_type -> server.SimpleQuery - 47, // 84: server.Runner.GetSecrets:input_type -> server.Empty - 42, // 85: server.Runner.CreateSecret:input_type -> server.Secret - 42, // 86: server.Runner.DeleteSecret:input_type -> server.Secret - 42, // 87: server.Runner.UpdateSecret:input_type -> server.Secret - 44, // 88: server.Runner.PProf:input_type -> server.PProfRequest - 8, // 89: server.RunnerExtension.Run:input_type -> server.TestSuiteWithCase - 48, // 90: server.Mock.Reload:input_type -> server.MockConfig - 47, // 91: server.Mock.GetConfig:input_type -> server.Empty - 16, // 92: server.Runner.Run:output_type -> server.TestResult - 16, // 93: server.Runner.RunTestSuite:output_type -> server.TestResult - 0, // 94: server.Runner.GetSuites:output_type -> server.Suites - 18, // 95: server.Runner.CreateTestSuite:output_type -> server.HelloReply - 37, // 96: server.Runner.ImportTestSuite:output_type -> server.CommonResult - 7, // 97: server.Runner.GetTestSuite:output_type -> server.TestSuite - 18, // 98: server.Runner.UpdateTestSuite:output_type -> server.HelloReply - 18, // 99: server.Runner.DeleteTestSuite:output_type -> server.HelloReply - 18, // 100: server.Runner.DuplicateTestSuite:output_type -> server.HelloReply - 19, // 101: server.Runner.GetTestSuiteYaml:output_type -> server.YamlData - 20, // 102: server.Runner.ListTestCase:output_type -> server.Suite - 29, // 103: server.Runner.RunTestCase:output_type -> server.TestCaseResult - 23, // 104: server.Runner.GetTestCase:output_type -> server.TestCase - 18, // 105: server.Runner.CreateTestCase:output_type -> server.HelloReply - 18, // 106: server.Runner.UpdateTestCase:output_type -> server.HelloReply - 18, // 107: server.Runner.DeleteTestCase:output_type -> server.HelloReply - 18, // 108: server.Runner.DuplicateTestCase:output_type -> server.HelloReply - 22, // 109: server.Runner.GetSuggestedAPIs:output_type -> server.TestCases - 2, // 110: server.Runner.GetHistorySuites:output_type -> server.HistorySuites - 17, // 111: server.Runner.GetHistoryTestCaseWithResult:output_type -> server.HistoryTestResult - 24, // 112: server.Runner.GetHistoryTestCase:output_type -> server.HistoryTestCase - 18, // 113: server.Runner.DeleteHistoryTestCase:output_type -> server.HelloReply - 18, // 114: server.Runner.DeleteAllHistoryTestCase:output_type -> server.HelloReply - 25, // 115: server.Runner.GetTestCaseAllHistory:output_type -> server.HistoryTestCases - 38, // 116: server.Runner.ListCodeGenerator:output_type -> server.SimpleList - 37, // 117: server.Runner.GenerateCode:output_type -> server.CommonResult - 38, // 118: server.Runner.ListConverter:output_type -> server.SimpleList - 37, // 119: server.Runner.ConvertTestSuite:output_type -> server.CommonResult - 31, // 120: server.Runner.PopularHeaders:output_type -> server.Pairs - 31, // 121: server.Runner.FunctionsQuery:output_type -> server.Pairs - 31, // 122: server.Runner.FunctionsQueryStream:output_type -> server.Pairs - 49, // 123: server.Runner.GetVersion:output_type -> server.Version - 18, // 124: server.Runner.Sample:output_type -> server.HelloReply - 46, // 125: server.Runner.DownloadResponseFile:output_type -> server.FileData - 35, // 126: server.Runner.GetStoreKinds:output_type -> server.StoreKinds - 33, // 127: server.Runner.GetStores:output_type -> server.Stores - 34, // 128: server.Runner.CreateStore:output_type -> server.Store - 34, // 129: server.Runner.UpdateStore:output_type -> server.Store - 34, // 130: server.Runner.DeleteStore:output_type -> server.Store - 43, // 131: server.Runner.VerifyStore:output_type -> server.ExtensionStatus - 41, // 132: server.Runner.GetSecrets:output_type -> server.Secrets - 37, // 133: server.Runner.CreateSecret:output_type -> server.CommonResult - 37, // 134: server.Runner.DeleteSecret:output_type -> server.CommonResult - 37, // 135: server.Runner.UpdateSecret:output_type -> server.CommonResult - 45, // 136: server.Runner.PProf:output_type -> server.PProfData - 37, // 137: server.RunnerExtension.Run:output_type -> server.CommonResult - 47, // 138: server.Mock.Reload:output_type -> server.Empty - 48, // 139: server.Mock.GetConfig:output_type -> server.MockConfig - 92, // [92:140] is the sub-list for method output_type - 44, // [44:92] is the sub-list for method input_type + 40, // 70: server.Runner.HistoryGenerateCode:input_type -> server.CodeGenerateRequest + 47, // 71: server.Runner.ListConverter:input_type -> server.Empty + 40, // 72: server.Runner.ConvertTestSuite:input_type -> server.CodeGenerateRequest + 47, // 73: server.Runner.PopularHeaders:input_type -> server.Empty + 32, // 74: server.Runner.FunctionsQuery:input_type -> server.SimpleQuery + 32, // 75: server.Runner.FunctionsQueryStream:input_type -> server.SimpleQuery + 47, // 76: server.Runner.GetVersion:input_type -> server.Empty + 47, // 77: server.Runner.Sample:input_type -> server.Empty + 23, // 78: server.Runner.DownloadResponseFile:input_type -> server.TestCase + 47, // 79: server.Runner.GetStoreKinds:input_type -> server.Empty + 47, // 80: server.Runner.GetStores:input_type -> server.Empty + 34, // 81: server.Runner.CreateStore:input_type -> server.Store + 34, // 82: server.Runner.UpdateStore:input_type -> server.Store + 34, // 83: server.Runner.DeleteStore:input_type -> server.Store + 32, // 84: server.Runner.VerifyStore:input_type -> server.SimpleQuery + 47, // 85: server.Runner.GetSecrets:input_type -> server.Empty + 42, // 86: server.Runner.CreateSecret:input_type -> server.Secret + 42, // 87: server.Runner.DeleteSecret:input_type -> server.Secret + 42, // 88: server.Runner.UpdateSecret:input_type -> server.Secret + 44, // 89: server.Runner.PProf:input_type -> server.PProfRequest + 8, // 90: server.RunnerExtension.Run:input_type -> server.TestSuiteWithCase + 48, // 91: server.Mock.Reload:input_type -> server.MockConfig + 47, // 92: server.Mock.GetConfig:input_type -> server.Empty + 16, // 93: server.Runner.Run:output_type -> server.TestResult + 16, // 94: server.Runner.RunTestSuite:output_type -> server.TestResult + 0, // 95: server.Runner.GetSuites:output_type -> server.Suites + 18, // 96: server.Runner.CreateTestSuite:output_type -> server.HelloReply + 37, // 97: server.Runner.ImportTestSuite:output_type -> server.CommonResult + 7, // 98: server.Runner.GetTestSuite:output_type -> server.TestSuite + 18, // 99: server.Runner.UpdateTestSuite:output_type -> server.HelloReply + 18, // 100: server.Runner.DeleteTestSuite:output_type -> server.HelloReply + 18, // 101: server.Runner.DuplicateTestSuite:output_type -> server.HelloReply + 19, // 102: server.Runner.GetTestSuiteYaml:output_type -> server.YamlData + 20, // 103: server.Runner.ListTestCase:output_type -> server.Suite + 29, // 104: server.Runner.RunTestCase:output_type -> server.TestCaseResult + 23, // 105: server.Runner.GetTestCase:output_type -> server.TestCase + 18, // 106: server.Runner.CreateTestCase:output_type -> server.HelloReply + 18, // 107: server.Runner.UpdateTestCase:output_type -> server.HelloReply + 18, // 108: server.Runner.DeleteTestCase:output_type -> server.HelloReply + 18, // 109: server.Runner.DuplicateTestCase:output_type -> server.HelloReply + 22, // 110: server.Runner.GetSuggestedAPIs:output_type -> server.TestCases + 2, // 111: server.Runner.GetHistorySuites:output_type -> server.HistorySuites + 17, // 112: server.Runner.GetHistoryTestCaseWithResult:output_type -> server.HistoryTestResult + 24, // 113: server.Runner.GetHistoryTestCase:output_type -> server.HistoryTestCase + 18, // 114: server.Runner.DeleteHistoryTestCase:output_type -> server.HelloReply + 18, // 115: server.Runner.DeleteAllHistoryTestCase:output_type -> server.HelloReply + 25, // 116: server.Runner.GetTestCaseAllHistory:output_type -> server.HistoryTestCases + 38, // 117: server.Runner.ListCodeGenerator:output_type -> server.SimpleList + 37, // 118: server.Runner.GenerateCode:output_type -> server.CommonResult + 37, // 119: server.Runner.HistoryGenerateCode:output_type -> server.CommonResult + 38, // 120: server.Runner.ListConverter:output_type -> server.SimpleList + 37, // 121: server.Runner.ConvertTestSuite:output_type -> server.CommonResult + 31, // 122: server.Runner.PopularHeaders:output_type -> server.Pairs + 31, // 123: server.Runner.FunctionsQuery:output_type -> server.Pairs + 31, // 124: server.Runner.FunctionsQueryStream:output_type -> server.Pairs + 49, // 125: server.Runner.GetVersion:output_type -> server.Version + 18, // 126: server.Runner.Sample:output_type -> server.HelloReply + 46, // 127: server.Runner.DownloadResponseFile:output_type -> server.FileData + 35, // 128: server.Runner.GetStoreKinds:output_type -> server.StoreKinds + 33, // 129: server.Runner.GetStores:output_type -> server.Stores + 34, // 130: server.Runner.CreateStore:output_type -> server.Store + 34, // 131: server.Runner.UpdateStore:output_type -> server.Store + 34, // 132: server.Runner.DeleteStore:output_type -> server.Store + 43, // 133: server.Runner.VerifyStore:output_type -> server.ExtensionStatus + 41, // 134: server.Runner.GetSecrets:output_type -> server.Secrets + 37, // 135: server.Runner.CreateSecret:output_type -> server.CommonResult + 37, // 136: server.Runner.DeleteSecret:output_type -> server.CommonResult + 37, // 137: server.Runner.UpdateSecret:output_type -> server.CommonResult + 45, // 138: server.Runner.PProf:output_type -> server.PProfData + 37, // 139: server.RunnerExtension.Run:output_type -> server.CommonResult + 47, // 140: server.Mock.Reload:output_type -> server.Empty + 48, // 141: server.Mock.GetConfig:output_type -> server.MockConfig + 93, // [93:142] is the sub-list for method output_type + 44, // [44:93] is the sub-list for method input_type 44, // [44:44] is the sub-list for extension type_name 44, // [44:44] is the sub-list for extension extendee 0, // [0:44] is the sub-list for field type_name diff --git a/pkg/server/server.pb.gw.go b/pkg/server/server.pb.gw.go index 31e31cb71..808d0b7cd 100644 --- a/pkg/server/server.pb.gw.go +++ b/pkg/server/server.pb.gw.go @@ -1558,6 +1558,32 @@ func local_request_Runner_GenerateCode_0(ctx context.Context, marshaler runtime. } +func request_Runner_HistoryGenerateCode_0(ctx context.Context, marshaler runtime.Marshaler, client RunnerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CodeGenerateRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.HistoryGenerateCode(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Runner_HistoryGenerateCode_0(ctx context.Context, marshaler runtime.Marshaler, server RunnerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CodeGenerateRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.HistoryGenerateCode(ctx, &protoReq) + return msg, metadata, err + +} + func request_Runner_ListConverter_0(ctx context.Context, marshaler runtime.Marshaler, client RunnerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq Empty var metadata runtime.ServerMetadata @@ -2921,6 +2947,31 @@ func RegisterRunnerHandlerServer(ctx context.Context, mux *runtime.ServeMux, ser }) + mux.Handle("POST", pattern_Runner_HistoryGenerateCode_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/server.Runner/HistoryGenerateCode", runtime.WithHTTPPathPattern("/api/v1/codeGenerators/history/generate")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Runner_HistoryGenerateCode_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Runner_HistoryGenerateCode_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Runner_ListConverter_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -4084,6 +4135,28 @@ func RegisterRunnerHandlerClient(ctx context.Context, mux *runtime.ServeMux, cli }) + mux.Handle("POST", pattern_Runner_HistoryGenerateCode_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/server.Runner/HistoryGenerateCode", runtime.WithHTTPPathPattern("/api/v1/codeGenerators/history/generate")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Runner_HistoryGenerateCode_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Runner_HistoryGenerateCode_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Runner_ListConverter_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -4558,6 +4631,8 @@ var ( pattern_Runner_GenerateCode_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "codeGenerators", "generate"}, "")) + pattern_Runner_HistoryGenerateCode_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"api", "v1", "codeGenerators", "history", "generate"}, "")) + pattern_Runner_ListConverter_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "converters"}, "")) pattern_Runner_ConvertTestSuite_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "converters", "convert"}, "")) @@ -4650,6 +4725,8 @@ var ( forward_Runner_GenerateCode_0 = runtime.ForwardResponseMessage + forward_Runner_HistoryGenerateCode_0 = runtime.ForwardResponseMessage + forward_Runner_ListConverter_0 = runtime.ForwardResponseMessage forward_Runner_ConvertTestSuite_0 = runtime.ForwardResponseMessage diff --git a/pkg/server/server.proto b/pkg/server/server.proto index de2820d2a..1bf09e281 100644 --- a/pkg/server/server.proto +++ b/pkg/server/server.proto @@ -163,6 +163,12 @@ service Runner { body: "*" }; } + rpc HistoryGenerateCode(CodeGenerateRequest) returns (CommonResult) { + option (google.api.http) = { + post: "/api/v1/codeGenerators/history/generate" + body: "*" + }; + } // converter rpc ListConverter(Empty) returns (SimpleList) { @@ -537,6 +543,7 @@ message CodeGenerateRequest { string TestSuite = 1; string TestCase = 2; string Generator = 3; + string ID = 4; } message Secrets { diff --git a/pkg/server/server.swagger.json b/pkg/server/server.swagger.json index 3f903910e..82db45182 100644 --- a/pkg/server/server.swagger.json +++ b/pkg/server/server.swagger.json @@ -77,6 +77,38 @@ ] } }, + "/api/v1/codeGenerators/history/generate": { + "post": { + "operationId": "Runner_HistoryGenerateCode", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/serverCommonResult" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/serverCodeGenerateRequest" + } + } + ], + "tags": [ + "Runner" + ] + } + }, "/api/v1/converters": { "get": { "summary": "converter", @@ -2546,6 +2578,9 @@ }, "Generator": { "type": "string" + }, + "ID": { + "type": "string" } } }, diff --git a/pkg/server/server_grpc.pb.go b/pkg/server/server_grpc.pb.go index 60dd9da19..df5ead911 100644 --- a/pkg/server/server_grpc.pb.go +++ b/pkg/server/server_grpc.pb.go @@ -54,6 +54,7 @@ type RunnerClient interface { // code generator ListCodeGenerator(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*SimpleList, error) GenerateCode(ctx context.Context, in *CodeGenerateRequest, opts ...grpc.CallOption) (*CommonResult, error) + HistoryGenerateCode(ctx context.Context, in *CodeGenerateRequest, opts ...grpc.CallOption) (*CommonResult, error) // converter ListConverter(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*SimpleList, error) ConvertTestSuite(ctx context.Context, in *CodeGenerateRequest, opts ...grpc.CallOption) (*CommonResult, error) @@ -344,6 +345,15 @@ func (c *runnerClient) GenerateCode(ctx context.Context, in *CodeGenerateRequest return out, nil } +func (c *runnerClient) HistoryGenerateCode(ctx context.Context, in *CodeGenerateRequest, opts ...grpc.CallOption) (*CommonResult, error) { + out := new(CommonResult) + err := c.cc.Invoke(ctx, "/server.Runner/HistoryGenerateCode", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *runnerClient) ListConverter(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*SimpleList, error) { out := new(SimpleList) err := c.cc.Invoke(ctx, "/server.Runner/ListConverter", in, out, opts...) @@ -573,6 +583,7 @@ type RunnerServer interface { // code generator ListCodeGenerator(context.Context, *Empty) (*SimpleList, error) GenerateCode(context.Context, *CodeGenerateRequest) (*CommonResult, error) + HistoryGenerateCode(context.Context, *CodeGenerateRequest) (*CommonResult, error) // converter ListConverter(context.Context, *Empty) (*SimpleList, error) ConvertTestSuite(context.Context, *CodeGenerateRequest) (*CommonResult, error) @@ -682,6 +693,9 @@ func (UnimplementedRunnerServer) ListCodeGenerator(context.Context, *Empty) (*Si func (UnimplementedRunnerServer) GenerateCode(context.Context, *CodeGenerateRequest) (*CommonResult, error) { return nil, status.Errorf(codes.Unimplemented, "method GenerateCode not implemented") } +func (UnimplementedRunnerServer) HistoryGenerateCode(context.Context, *CodeGenerateRequest) (*CommonResult, error) { + return nil, status.Errorf(codes.Unimplemented, "method HistoryGenerateCode not implemented") +} func (UnimplementedRunnerServer) ListConverter(context.Context, *Empty) (*SimpleList, error) { return nil, status.Errorf(codes.Unimplemented, "method ListConverter not implemented") } @@ -1228,6 +1242,24 @@ func _Runner_GenerateCode_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } +func _Runner_HistoryGenerateCode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CodeGenerateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RunnerServer).HistoryGenerateCode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/server.Runner/HistoryGenerateCode", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RunnerServer).HistoryGenerateCode(ctx, req.(*CodeGenerateRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Runner_ListConverter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(Empty) if err := dec(in); err != nil { @@ -1685,6 +1717,10 @@ var Runner_ServiceDesc = grpc.ServiceDesc{ MethodName: "GenerateCode", Handler: _Runner_GenerateCode_Handler, }, + { + MethodName: "HistoryGenerateCode", + Handler: _Runner_HistoryGenerateCode_Handler, + }, { MethodName: "ListConverter", Handler: _Runner_ListConverter_Handler, diff --git a/pkg/testing/remote/converter.go b/pkg/testing/remote/converter.go index 023e07ed4..f107110c6 100644 --- a/pkg/testing/remote/converter.go +++ b/pkg/testing/remote/converter.go @@ -148,6 +148,7 @@ func ConvertToNormalHistoryTestCase(testcase *server.HistoryTestCase) (result te SuiteSpec: ConvertToNormalTestSuiteSpec(testcase.SuiteSpec), CreateTime: testcase.CreateTime.AsTime(), } + result.Data.Name = testcase.CaseName if testcase.Request != nil { result.Data.Request = testing.Request{ API: testcase.Request.Api, @@ -174,7 +175,7 @@ func ConvertToNormalHistoryTestCase(testcase *server.HistoryTestCase) (result te func ConvertHistoryToGRPCTestCase(historyTestcase *server.HistoryTestCase) (result testing.TestCase) { result = testing.TestCase{ Name: historyTestcase.CaseName, - ID: historyTestcase.ID, + ID: historyTestcase.ID, } if historyTestcase.Request != nil { result.Request = testing.Request{ From 22d587869c6474c0c0bbb851ad8e30af1882f77d Mon Sep 17 00:00:00 2001 From: ysf <1807100869@qq.com> Date: Mon, 9 Sep 2024 21:28:36 +0800 Subject: [PATCH 11/15] fix: fix the remaining problem --- console/atest-ui/src/views/TestCase.vue | 5 ++-- pkg/server/convert.go | 39 ++++--------------------- pkg/testing/case.go | 4 +-- pkg/testing/remote/converter.go | 6 ++-- pkg/testing/remote/grpc_store.go | 2 +- 5 files changed, 14 insertions(+), 42 deletions(-) diff --git a/console/atest-ui/src/views/TestCase.vue b/console/atest-ui/src/views/TestCase.vue index 87b966713..27c24d70c 100644 --- a/console/atest-ui/src/views/TestCase.vue +++ b/console/atest-ui/src/views/TestCase.vue @@ -838,6 +838,7 @@ Magic.Keys(() => { placeholder="Method" size="default" test-id="case-editor-method" + :disabled="isHistoryTestCase" > { - + { -
+
Date: Wed, 11 Sep 2024 14:21:37 +0800 Subject: [PATCH 12/15] fix: add tests --- pkg/server/convert_test.go | 131 ++++++++++++++++ pkg/testing/remote/converter_test.go | 208 ++++++++++++++++++++++++++ pkg/testing/remote/grpc_store_test.go | 21 +++ 3 files changed, 360 insertions(+) diff --git a/pkg/server/convert_test.go b/pkg/server/convert_test.go index 8c8a3e34a..20fd2eba4 100644 --- a/pkg/server/convert_test.go +++ b/pkg/server/convert_test.go @@ -16,7 +16,9 @@ limitations under the License. package server import ( + "google.golang.org/protobuf/types/known/timestamppb" "testing" + "time" atest "github.com/linuxsuren/api-testing/pkg/testing" "github.com/stretchr/testify/assert" @@ -149,3 +151,132 @@ func TestToNormalSuite(t *testing.T) { }, })) } + +func TestConvertToGRPCHistoryTestCase(t *testing.T) { + now := time.Now().UTC() + result := ConvertToGRPCHistoryTestCase(atest.HistoryTestCase{ + CreateTime: now, + SuiteParam: defaultMap, + SuiteSpec: atest.APISpec{ + Kind: "http", + URL: "/v1", + RPC: &atest.RPCDesc{ + Raw: "fake", + }, + Secure: &atest.Secure{ + KeyFile: "fake", + }, + }, + Data: atest.TestCase{ + Request: atest.Request{ + Header: defaultMap, + }, + Expect: atest.Response{ + BodyFieldsExpect: defaultInterMap, + }, + }, + }) + assert.Equal(t, result.Request.Header, defaultPairs) + assert.Equal(t, result.SuiteParam, defaultPairs) + assert.Equal(t, result.Response.BodyFieldsExpect, defaultPairs) + assert.Equal(t, "fake", result.SuiteSpec.Secure.Key) + assert.Equal(t, timestamppb.New(now), result.CreateTime) +} + +func TestToNormalTestCaseResult(t *testing.T) { + assert.Equal(t, atest.TestCaseResult{ + Body: "body", + Error: "error", + Header: defaultMap, + Id: "id", + Output: "output", + StatusCode: 200, + }, ToNormalTestCaseResult(&TestCaseResult{ + Body: "body", + Error: "error", + Header: defaultPairs, + Id: "id", + Output: "output", + StatusCode: 200, + })) +} + +func TestToGRPCHistoryTestCaseResult(t *testing.T) { + t.Run("TestCaseResult is empty", func(t *testing.T) { + historyTestResult := atest.HistoryTestResult{ + Message: "test message", + Error: "test error", + CreateTime: time.Now(), + Data: atest.HistoryTestCase{ + ID: "test-id", + }, + TestCaseResult: nil, + } + + result := ToGRPCHistoryTestCaseResult(historyTestResult) + + assert.Equal(t, 0, len(result.TestCaseResult)) + assert.Equal(t, historyTestResult.Message, result.Message) + assert.Equal(t, historyTestResult.Error, result.Error) + }) + + t.Run("TestCaseResult is not empty", func(t *testing.T) { + now := time.Now().UTC() + + result := ToGRPCHistoryTestCaseResult(atest.HistoryTestResult{ + Message: "fake message", + CreateTime: now, + Data: atest.HistoryTestCase{ + ID: "fake id", + }, + TestCaseResult: []atest.TestCaseResult{ + { + StatusCode: 200, + Output: "fake output", + }, + { + Output: "fake output 2", + }, + }, + }) + + assert.Equal(t, 2, len(result.TestCaseResult)) + assert.Equal(t, "fake message", result.Message) + assert.Equal(t, now, result.CreateTime.AsTime()) + assert.Equal(t, "fake output", result.TestCaseResult[0].Output) + assert.Equal(t, "fake output 2", result.TestCaseResult[1].Output) + }) +} + +func TestToGRPCTestSuiteSpec(t *testing.T) { + + t.Run("empty", func(t *testing.T) { + assert.Equal(t, &APISpec{}, ToGRPCTestSuiteSpec(atest.APISpec{})) + }) + + t.Run("fields", func(t *testing.T) { + assert.Equal(t, &APISpec{ + Url: "/v1", + Kind: "http", + Rpc: &RPC{ + Raw: "fake", + }, + Secure: &Secure{ + Key: "fake", + }, + }, ToGRPCTestSuiteSpec(atest.APISpec{ + Kind: "http", + URL: "/v1", + RPC: &atest.RPCDesc{ + Raw: "fake", + }, + Secure: &atest.Secure{ + KeyFile: "fake", + }, + })) + }) +} + +var defaultInterMap = map[string]interface{}{"foo": "bar"} +var defaultMap map[string]string = map[string]string{"foo": "bar"} +var defaultPairs []*Pair = []*Pair{{Key: "foo", Value: "bar"}} diff --git a/pkg/testing/remote/converter_test.go b/pkg/testing/remote/converter_test.go index 126b963bc..a54f6e2ff 100644 --- a/pkg/testing/remote/converter_test.go +++ b/pkg/testing/remote/converter_test.go @@ -17,7 +17,9 @@ limitations under the License. package remote import ( + "google.golang.org/protobuf/types/known/timestamppb" "testing" + "time" server "github.com/linuxsuren/api-testing/pkg/server" atest "github.com/linuxsuren/api-testing/pkg/testing" @@ -25,6 +27,7 @@ import ( ) func TestConvert(t *testing.T) { + now := time.Now().UTC() t.Run("convertToNormalTestSuite, empty object", func(t *testing.T) { assert.Equal(t, &atest.TestSuite{ Param: map[string]string{}, @@ -123,6 +126,211 @@ func TestConvert(t *testing.T) { assert.Equal(t, defaultPairs, result.Response.BodyFieldsExpect) assert.Equal(t, defaultPairs, result.Response.Header) }) + + t.Run("convertHistoryToGRPCTestCase", func(t *testing.T) { + result := ConvertHistoryToGRPCTestCase(&server.HistoryTestCase{ + CaseName: "fake", + Request: &server.Request{ + Header: defaultPairs, + }, + Response: &server.Response{ + BodyFieldsExpect: defaultPairs, + }, + }) + if !assert.NotNil(t, result) { + return + } + assert.Equal(t, defaultMap, result.Request.Header) + assert.Equal(t, defaultInterMap, result.Expect.BodyFieldsExpect) + assert.Equal(t, "fake", result.Name) + }) + + t.Run("convertToNormalHistoryTestCase", func(t *testing.T) { + assert.Equal(t, atest.HistoryTestCase{ + CreateTime: now, + SuiteParam: defaultMap, + SuiteSpec: atest.APISpec{ + Kind: "http", + URL: "/v1", + RPC: &atest.RPCDesc{ + Raw: "fake", + }, + Secure: &atest.Secure{ + KeyFile: "fake", + }, + }, + Data: atest.TestCase{ + Request: atest.Request{ + API: "/v1", + Header: defaultMap, + Query: map[string]interface{}{}, + Form: map[string]string{}, + }, + Expect: atest.Response{ + BodyFieldsExpect: defaultInterMap, + Header: map[string]string{}, + }, + }, + }, ConvertToNormalHistoryTestCase(&server.HistoryTestCase{ + CreateTime: timestamppb.New(now), + SuiteParam: defaultPairs, + SuiteSpec: &server.APISpec{ + Url: "/v1", + Kind: "http", + Rpc: &server.RPC{ + Raw: "fake", + }, + Secure: &server.Secure{ + Key: "fake", + }, + }, + Request: &server.Request{ + Header: defaultPairs, + Query: nil, + Api: "/v1", + }, + Response: &server.Response{ + BodyFieldsExpect: defaultPairs, + }, + })) + }) + + t.Run("convertToNormalHistoryTestSuite, empty object", func(t *testing.T) { + assert.Equal(t, &atest.HistoryTestSuite{}, ConvertToNormalHistoryTestSuite(&HistoryTestSuite{})) + }) + + t.Run("convertToNormalHistoryTestSuite, normal object", func(t *testing.T) { + assert.Equal(t, &atest.HistoryTestSuite{ + HistorySuiteName: "fake", + Items: []atest.HistoryTestCase{ + { + CreateTime: now, + SuiteParam: defaultMap, + SuiteSpec: atest.APISpec{ + Kind: "http", + URL: "/v1", + RPC: &atest.RPCDesc{ + Raw: "fake", + }, + Secure: &atest.Secure{ + KeyFile: "fake", + }, + }, + }, + }, + }, ConvertToNormalHistoryTestSuite(&HistoryTestSuite{ + HistorySuiteName: "fake", + Items: []*server.HistoryTestCase{ + { + CreateTime: timestamppb.New(now), + SuiteParam: defaultPairs, + SuiteSpec: &server.APISpec{ + Url: "/v1", + Kind: "http", + Rpc: &server.RPC{ + Raw: "fake", + }, + Secure: &server.Secure{ + Key: "fake", + }, + }, + }, + }, + })) + }) + + t.Run("convertToGRPCHistoryTestCase", func(t *testing.T) { + result := ConvertToGRPCHistoryTestCase(atest.HistoryTestCase{ + SuiteParam: defaultMap, + SuiteSpec: atest.APISpec{ + Secure: &atest.Secure{ + KeyFile: "fake", + }, + }, + Data: atest.TestCase{ + Request: atest.Request{ + Header: defaultMap, + }, + Expect: atest.Response{ + BodyFieldsExpect: defaultInterMap, + }, + }, + }) + assert.Equal(t, defaultPairs, result.SuiteParam) + assert.Equal(t, defaultPairs, result.Request.Header) + assert.Equal(t, defaultPairs, result.Response.BodyFieldsExpect) + assert.Equal(t, "fake", result.SuiteSpec.Secure.Key) + }) + + t.Run("convertToGRPCHistoryTestCaseResult", func(t *testing.T) { + result := ConvertToGRPCHistoryTestCaseResult(atest.TestCaseResult{ + Body: "fake body", + Output: "fake output", + }, &atest.TestSuite{ + Param: defaultMap, + Spec: atest.APISpec{ + Secure: &atest.Secure{ + KeyFile: "fake", + }, + }, + Items: []atest.TestCase{ + { + Request: atest.Request{ + Header: defaultMap, + }, + Expect: atest.Response{ + BodyFieldsExpect: defaultInterMap, + }, + }, + }, + }) + assert.Equal(t, defaultPairs, result.Data.SuiteParam) + assert.Equal(t, defaultPairs, result.Data.Request.Header) + assert.Equal(t, defaultPairs, result.Data.Response.BodyFieldsExpect) + assert.Equal(t, "fake", result.Data.SuiteSpec.Secure.Key) + assert.Equal(t, "fake output", result.TestCaseResult[0].Output) + assert.Equal(t, "fake body", result.TestCaseResult[0].Body) + }) + + t.Run("convertToNormalTestCaseResult", func(t *testing.T) { + assert.Equal(t, atest.HistoryTestResult{ + CreateTime: now, + Data: atest.HistoryTestCase{ + SuiteParam: defaultMap, + CreateTime: now, + }, + TestCaseResult: []atest.TestCaseResult{ + { + Body: "fake body", + Output: "fake output", + Header: defaultMap, + }, + { + Body: "fake body 2", + Output: "fake output 2", + Header: defaultMap, + }, + }, + }, ConvertToNormalTestCaseResult(&server.HistoryTestResult{ + CreateTime: timestamppb.New(now), + Data: &server.HistoryTestCase{ + SuiteParam: defaultPairs, + CreateTime: timestamppb.New(now), + }, + TestCaseResult: []*server.TestCaseResult{ + { + Body: "fake body", + Output: "fake output", + Header: defaultPairs, + }, + { + Body: "fake body 2", + Output: "fake output 2", + Header: defaultPairs, + }, + }, + })) + }) } var defaultInterMap = map[string]interface{}{"foo": "bar"} diff --git a/pkg/testing/remote/grpc_store_test.go b/pkg/testing/remote/grpc_store_test.go index 769a94975..f243a3092 100644 --- a/pkg/testing/remote/grpc_store_test.go +++ b/pkg/testing/remote/grpc_store_test.go @@ -87,6 +87,27 @@ func TestNewGRPCLoader(t *testing.T) { err = writer.DeleteSuite("") assert.Error(t, err) + _, err = writer.ListHistoryTestSuite() + assert.Error(t, err) + + err = writer.CreateHistoryTestCase(atest.TestCaseResult{}, &atest.TestSuite{}) + assert.Error(t, err) + + _, err = writer.GetHistoryTestCase("") + assert.Error(t, err) + + _, err = writer.GetHistoryTestCaseWithResult("") + assert.Error(t, err) + + _, err = writer.GetTestCaseAllHistory("", "") + assert.Error(t, err) + + err = writer.DeleteHistoryTestCase("") + assert.Error(t, err) + + err = writer.DeleteAllHistoryTestCase("", "") + assert.Error(t, err) + var readonly bool readonly, err = writer.Verify() assert.Error(t, err) From 7ebe10e803f4301530f4b35391088b09fd4e2247 Mon Sep 17 00:00:00 2001 From: ysf <1807100869@qq.com> Date: Thu, 12 Sep 2024 17:13:59 +0800 Subject: [PATCH 13/15] fix: fix history page display --- console/atest-ui/src/views/TestCase.vue | 45 +- console/atest-ui/src/views/net.ts | 2 +- go.work.sum | 4 + pkg/server/convert.go | 1 + pkg/server/remote_server.go | 30 +- pkg/server/server.pb.go | 1124 ++++++++++++----------- pkg/server/server.proto | 1 + pkg/server/server.swagger.json | 7 + pkg/testing/case.go | 1 + pkg/testing/loader.go | 2 +- pkg/testing/loader_file.go | 2 +- pkg/testing/loader_non.go | 2 +- pkg/testing/remote/converter.go | 39 +- pkg/testing/remote/converter_test.go | 17 +- pkg/testing/remote/grpc_store.go | 4 +- pkg/testing/remote/grpc_store_test.go | 2 +- 16 files changed, 660 insertions(+), 623 deletions(-) diff --git a/console/atest-ui/src/views/TestCase.vue b/console/atest-ui/src/views/TestCase.vue index 27c24d70c..26bd42d5e 100644 --- a/console/atest-ui/src/views/TestCase.vue +++ b/console/atest-ui/src/views/TestCase.vue @@ -163,7 +163,7 @@ function generateCode() { const ID = props.historyCaseID if (isHistoryTestCase.value == true){ API.HistoryGenerateCode({ - ID: ID, + id: ID, generator: currentCodeGenerator.value }, (e) => { ElMessage({ @@ -401,6 +401,9 @@ function setTestCaseWithSuite(e, suite) { suiteName: suite, data: e } as TestCaseWithSuite; + if (isHistoryTestCase.value == true){ + testCaseWithSuite.value.data.request.api = `${testCaseWithSuite.value.data.suiteApi}${testCaseWithSuite.value.data.request.api}` + } } load() @@ -515,14 +518,28 @@ function openHistoryDialog(){ }) } +function handleDialogClose(){ + caseRevertLoading.value = false + historyDialogOpened.value = false + historyForm.value.selectedID = '' + const target = document.getElementById('compareView'); + target.innerHTML = '' +} + function handleHistoryChange(value) { selectedHistory.value = historyRecords.value.find(record => record.ID === value); const { caseName: name, suiteName, request, - response + response, + historyHeader, } = selectedHistory.value; + request.header = historyHeader + request.header.push({ + key: '', + value: '' + }) formatHistoryCase.value = { name, suiteName, @@ -573,11 +590,7 @@ const submitForm = async (formEl) => { load() } }, UIAPI.ErrorTip, saveLoading) - caseRevertLoading.value = false - historyDialogOpened.value = false - historyForm.value.selectedID = '' - const target = document.getElementById('compareView'); - target.innerHTML = ''; + handleDialogClose() } }) } @@ -587,12 +600,8 @@ const goToHistory = async (formEl) => { await formEl.validate((valid: boolean, fields) => { if (valid) { caseRevertLoading.value = true - emit('toHistoryPanel', { ID: selectedHistory.value.ID, panelName: 'history' }); - caseRevertLoading.value = false - historyDialogOpened.value = false - historyForm.value.selectedID = '' - const target = document.getElementById('compareView'); - target.innerHTML = ''; + emit('toHistoryPanel', { ID: selectedHistory.value.ID, panelName: 'history' }) + handleDialogClose() } }) } @@ -600,12 +609,8 @@ const goToHistory = async (formEl) => { const deleteAllHistory = async (formEl) => { if (!formEl) return caseRevertLoading.value = true - API.DeleteAllHistoryTestCase(props.suite, props.name, handleDeleteResponse); - caseRevertLoading.value = false - historyDialogOpened.value = false - historyForm.value.selectedID = '' - const target = document.getElementById('compareView'); - target.innerHTML = ''; + API.DeleteAllHistoryTestCase(props.suite, props.name, handleDeleteResponse) + handleDialogClose() } const options = GetHTTPMethods() @@ -1110,7 +1115,7 @@ Magic.Keys(() => { - + server.APISpec 26, // 24: server.HistoryTestCase.request:type_name -> server.Request 27, // 25: server.HistoryTestCase.response:type_name -> server.Response - 24, // 26: server.HistoryTestCases.data:type_name -> server.HistoryTestCase - 30, // 27: server.Request.header:type_name -> server.Pair - 30, // 28: server.Request.query:type_name -> server.Pair - 30, // 29: server.Request.cookie:type_name -> server.Pair - 30, // 30: server.Request.form:type_name -> server.Pair - 30, // 31: server.Response.header:type_name -> server.Pair - 30, // 32: server.Response.bodyFieldsExpect:type_name -> server.Pair - 28, // 33: server.Response.ConditionalVerify:type_name -> server.ConditionalVerify - 30, // 34: server.TestCaseResult.header:type_name -> server.Pair - 30, // 35: server.Pairs.data:type_name -> server.Pair - 34, // 36: server.Stores.data:type_name -> server.Store - 30, // 37: server.Store.properties:type_name -> server.Pair - 36, // 38: server.Store.kind:type_name -> server.StoreKind - 36, // 39: server.StoreKinds.data:type_name -> server.StoreKind - 30, // 40: server.SimpleList.data:type_name -> server.Pair - 42, // 41: server.Secrets.data:type_name -> server.Secret - 1, // 42: server.Suites.DataEntry.value:type_name -> server.Items - 3, // 43: server.HistorySuites.DataEntry.value:type_name -> server.HistoryItems - 15, // 44: server.Runner.Run:input_type -> server.TestTask - 12, // 45: server.Runner.RunTestSuite:input_type -> server.TestSuiteIdentity - 47, // 46: server.Runner.GetSuites:input_type -> server.Empty - 12, // 47: server.Runner.CreateTestSuite:input_type -> server.TestSuiteIdentity - 6, // 48: server.Runner.ImportTestSuite:input_type -> server.TestSuiteSource - 12, // 49: server.Runner.GetTestSuite:input_type -> server.TestSuiteIdentity - 7, // 50: server.Runner.UpdateTestSuite:input_type -> server.TestSuite - 12, // 51: server.Runner.DeleteTestSuite:input_type -> server.TestSuiteIdentity - 13, // 52: server.Runner.DuplicateTestSuite:input_type -> server.TestSuiteDuplicate - 12, // 53: server.Runner.GetTestSuiteYaml:input_type -> server.TestSuiteIdentity - 12, // 54: server.Runner.ListTestCase:input_type -> server.TestSuiteIdentity - 5, // 55: server.Runner.RunTestCase:input_type -> server.TestCaseIdentity - 5, // 56: server.Runner.GetTestCase:input_type -> server.TestCaseIdentity - 21, // 57: server.Runner.CreateTestCase:input_type -> server.TestCaseWithSuite - 21, // 58: server.Runner.UpdateTestCase:input_type -> server.TestCaseWithSuite - 5, // 59: server.Runner.DeleteTestCase:input_type -> server.TestCaseIdentity - 14, // 60: server.Runner.DuplicateTestCase:input_type -> server.TestCaseDuplicate - 12, // 61: server.Runner.GetSuggestedAPIs:input_type -> server.TestSuiteIdentity - 47, // 62: server.Runner.GetHistorySuites:input_type -> server.Empty - 24, // 63: server.Runner.GetHistoryTestCaseWithResult:input_type -> server.HistoryTestCase - 24, // 64: server.Runner.GetHistoryTestCase:input_type -> server.HistoryTestCase - 24, // 65: server.Runner.DeleteHistoryTestCase:input_type -> server.HistoryTestCase - 24, // 66: server.Runner.DeleteAllHistoryTestCase:input_type -> server.HistoryTestCase - 23, // 67: server.Runner.GetTestCaseAllHistory:input_type -> server.TestCase - 47, // 68: server.Runner.ListCodeGenerator:input_type -> server.Empty - 40, // 69: server.Runner.GenerateCode:input_type -> server.CodeGenerateRequest - 40, // 70: server.Runner.HistoryGenerateCode:input_type -> server.CodeGenerateRequest - 47, // 71: server.Runner.ListConverter:input_type -> server.Empty - 40, // 72: server.Runner.ConvertTestSuite:input_type -> server.CodeGenerateRequest - 47, // 73: server.Runner.PopularHeaders:input_type -> server.Empty - 32, // 74: server.Runner.FunctionsQuery:input_type -> server.SimpleQuery - 32, // 75: server.Runner.FunctionsQueryStream:input_type -> server.SimpleQuery - 47, // 76: server.Runner.GetVersion:input_type -> server.Empty - 47, // 77: server.Runner.Sample:input_type -> server.Empty - 23, // 78: server.Runner.DownloadResponseFile:input_type -> server.TestCase - 47, // 79: server.Runner.GetStoreKinds:input_type -> server.Empty - 47, // 80: server.Runner.GetStores:input_type -> server.Empty - 34, // 81: server.Runner.CreateStore:input_type -> server.Store - 34, // 82: server.Runner.UpdateStore:input_type -> server.Store - 34, // 83: server.Runner.DeleteStore:input_type -> server.Store - 32, // 84: server.Runner.VerifyStore:input_type -> server.SimpleQuery - 47, // 85: server.Runner.GetSecrets:input_type -> server.Empty - 42, // 86: server.Runner.CreateSecret:input_type -> server.Secret - 42, // 87: server.Runner.DeleteSecret:input_type -> server.Secret - 42, // 88: server.Runner.UpdateSecret:input_type -> server.Secret - 44, // 89: server.Runner.PProf:input_type -> server.PProfRequest - 8, // 90: server.RunnerExtension.Run:input_type -> server.TestSuiteWithCase - 48, // 91: server.Mock.Reload:input_type -> server.MockConfig - 47, // 92: server.Mock.GetConfig:input_type -> server.Empty - 16, // 93: server.Runner.Run:output_type -> server.TestResult - 16, // 94: server.Runner.RunTestSuite:output_type -> server.TestResult - 0, // 95: server.Runner.GetSuites:output_type -> server.Suites - 18, // 96: server.Runner.CreateTestSuite:output_type -> server.HelloReply - 37, // 97: server.Runner.ImportTestSuite:output_type -> server.CommonResult - 7, // 98: server.Runner.GetTestSuite:output_type -> server.TestSuite - 18, // 99: server.Runner.UpdateTestSuite:output_type -> server.HelloReply - 18, // 100: server.Runner.DeleteTestSuite:output_type -> server.HelloReply - 18, // 101: server.Runner.DuplicateTestSuite:output_type -> server.HelloReply - 19, // 102: server.Runner.GetTestSuiteYaml:output_type -> server.YamlData - 20, // 103: server.Runner.ListTestCase:output_type -> server.Suite - 29, // 104: server.Runner.RunTestCase:output_type -> server.TestCaseResult - 23, // 105: server.Runner.GetTestCase:output_type -> server.TestCase - 18, // 106: server.Runner.CreateTestCase:output_type -> server.HelloReply - 18, // 107: server.Runner.UpdateTestCase:output_type -> server.HelloReply - 18, // 108: server.Runner.DeleteTestCase:output_type -> server.HelloReply - 18, // 109: server.Runner.DuplicateTestCase:output_type -> server.HelloReply - 22, // 110: server.Runner.GetSuggestedAPIs:output_type -> server.TestCases - 2, // 111: server.Runner.GetHistorySuites:output_type -> server.HistorySuites - 17, // 112: server.Runner.GetHistoryTestCaseWithResult:output_type -> server.HistoryTestResult - 24, // 113: server.Runner.GetHistoryTestCase:output_type -> server.HistoryTestCase - 18, // 114: server.Runner.DeleteHistoryTestCase:output_type -> server.HelloReply - 18, // 115: server.Runner.DeleteAllHistoryTestCase:output_type -> server.HelloReply - 25, // 116: server.Runner.GetTestCaseAllHistory:output_type -> server.HistoryTestCases - 38, // 117: server.Runner.ListCodeGenerator:output_type -> server.SimpleList - 37, // 118: server.Runner.GenerateCode:output_type -> server.CommonResult - 37, // 119: server.Runner.HistoryGenerateCode:output_type -> server.CommonResult - 38, // 120: server.Runner.ListConverter:output_type -> server.SimpleList - 37, // 121: server.Runner.ConvertTestSuite:output_type -> server.CommonResult - 31, // 122: server.Runner.PopularHeaders:output_type -> server.Pairs - 31, // 123: server.Runner.FunctionsQuery:output_type -> server.Pairs - 31, // 124: server.Runner.FunctionsQueryStream:output_type -> server.Pairs - 49, // 125: server.Runner.GetVersion:output_type -> server.Version - 18, // 126: server.Runner.Sample:output_type -> server.HelloReply - 46, // 127: server.Runner.DownloadResponseFile:output_type -> server.FileData - 35, // 128: server.Runner.GetStoreKinds:output_type -> server.StoreKinds - 33, // 129: server.Runner.GetStores:output_type -> server.Stores - 34, // 130: server.Runner.CreateStore:output_type -> server.Store - 34, // 131: server.Runner.UpdateStore:output_type -> server.Store - 34, // 132: server.Runner.DeleteStore:output_type -> server.Store - 43, // 133: server.Runner.VerifyStore:output_type -> server.ExtensionStatus - 41, // 134: server.Runner.GetSecrets:output_type -> server.Secrets - 37, // 135: server.Runner.CreateSecret:output_type -> server.CommonResult - 37, // 136: server.Runner.DeleteSecret:output_type -> server.CommonResult - 37, // 137: server.Runner.UpdateSecret:output_type -> server.CommonResult - 45, // 138: server.Runner.PProf:output_type -> server.PProfData - 37, // 139: server.RunnerExtension.Run:output_type -> server.CommonResult - 47, // 140: server.Mock.Reload:output_type -> server.Empty - 48, // 141: server.Mock.GetConfig:output_type -> server.MockConfig - 93, // [93:142] is the sub-list for method output_type - 44, // [44:93] is the sub-list for method input_type - 44, // [44:44] is the sub-list for extension type_name - 44, // [44:44] is the sub-list for extension extendee - 0, // [0:44] is the sub-list for field type_name + 30, // 26: server.HistoryTestCase.historyHeader:type_name -> server.Pair + 24, // 27: server.HistoryTestCases.data:type_name -> server.HistoryTestCase + 30, // 28: server.Request.header:type_name -> server.Pair + 30, // 29: server.Request.query:type_name -> server.Pair + 30, // 30: server.Request.cookie:type_name -> server.Pair + 30, // 31: server.Request.form:type_name -> server.Pair + 30, // 32: server.Response.header:type_name -> server.Pair + 30, // 33: server.Response.bodyFieldsExpect:type_name -> server.Pair + 28, // 34: server.Response.ConditionalVerify:type_name -> server.ConditionalVerify + 30, // 35: server.TestCaseResult.header:type_name -> server.Pair + 30, // 36: server.Pairs.data:type_name -> server.Pair + 34, // 37: server.Stores.data:type_name -> server.Store + 30, // 38: server.Store.properties:type_name -> server.Pair + 36, // 39: server.Store.kind:type_name -> server.StoreKind + 36, // 40: server.StoreKinds.data:type_name -> server.StoreKind + 30, // 41: server.SimpleList.data:type_name -> server.Pair + 42, // 42: server.Secrets.data:type_name -> server.Secret + 1, // 43: server.Suites.DataEntry.value:type_name -> server.Items + 3, // 44: server.HistorySuites.DataEntry.value:type_name -> server.HistoryItems + 15, // 45: server.Runner.Run:input_type -> server.TestTask + 12, // 46: server.Runner.RunTestSuite:input_type -> server.TestSuiteIdentity + 47, // 47: server.Runner.GetSuites:input_type -> server.Empty + 12, // 48: server.Runner.CreateTestSuite:input_type -> server.TestSuiteIdentity + 6, // 49: server.Runner.ImportTestSuite:input_type -> server.TestSuiteSource + 12, // 50: server.Runner.GetTestSuite:input_type -> server.TestSuiteIdentity + 7, // 51: server.Runner.UpdateTestSuite:input_type -> server.TestSuite + 12, // 52: server.Runner.DeleteTestSuite:input_type -> server.TestSuiteIdentity + 13, // 53: server.Runner.DuplicateTestSuite:input_type -> server.TestSuiteDuplicate + 12, // 54: server.Runner.GetTestSuiteYaml:input_type -> server.TestSuiteIdentity + 12, // 55: server.Runner.ListTestCase:input_type -> server.TestSuiteIdentity + 5, // 56: server.Runner.RunTestCase:input_type -> server.TestCaseIdentity + 5, // 57: server.Runner.GetTestCase:input_type -> server.TestCaseIdentity + 21, // 58: server.Runner.CreateTestCase:input_type -> server.TestCaseWithSuite + 21, // 59: server.Runner.UpdateTestCase:input_type -> server.TestCaseWithSuite + 5, // 60: server.Runner.DeleteTestCase:input_type -> server.TestCaseIdentity + 14, // 61: server.Runner.DuplicateTestCase:input_type -> server.TestCaseDuplicate + 12, // 62: server.Runner.GetSuggestedAPIs:input_type -> server.TestSuiteIdentity + 47, // 63: server.Runner.GetHistorySuites:input_type -> server.Empty + 24, // 64: server.Runner.GetHistoryTestCaseWithResult:input_type -> server.HistoryTestCase + 24, // 65: server.Runner.GetHistoryTestCase:input_type -> server.HistoryTestCase + 24, // 66: server.Runner.DeleteHistoryTestCase:input_type -> server.HistoryTestCase + 24, // 67: server.Runner.DeleteAllHistoryTestCase:input_type -> server.HistoryTestCase + 23, // 68: server.Runner.GetTestCaseAllHistory:input_type -> server.TestCase + 47, // 69: server.Runner.ListCodeGenerator:input_type -> server.Empty + 40, // 70: server.Runner.GenerateCode:input_type -> server.CodeGenerateRequest + 40, // 71: server.Runner.HistoryGenerateCode:input_type -> server.CodeGenerateRequest + 47, // 72: server.Runner.ListConverter:input_type -> server.Empty + 40, // 73: server.Runner.ConvertTestSuite:input_type -> server.CodeGenerateRequest + 47, // 74: server.Runner.PopularHeaders:input_type -> server.Empty + 32, // 75: server.Runner.FunctionsQuery:input_type -> server.SimpleQuery + 32, // 76: server.Runner.FunctionsQueryStream:input_type -> server.SimpleQuery + 47, // 77: server.Runner.GetVersion:input_type -> server.Empty + 47, // 78: server.Runner.Sample:input_type -> server.Empty + 23, // 79: server.Runner.DownloadResponseFile:input_type -> server.TestCase + 47, // 80: server.Runner.GetStoreKinds:input_type -> server.Empty + 47, // 81: server.Runner.GetStores:input_type -> server.Empty + 34, // 82: server.Runner.CreateStore:input_type -> server.Store + 34, // 83: server.Runner.UpdateStore:input_type -> server.Store + 34, // 84: server.Runner.DeleteStore:input_type -> server.Store + 32, // 85: server.Runner.VerifyStore:input_type -> server.SimpleQuery + 47, // 86: server.Runner.GetSecrets:input_type -> server.Empty + 42, // 87: server.Runner.CreateSecret:input_type -> server.Secret + 42, // 88: server.Runner.DeleteSecret:input_type -> server.Secret + 42, // 89: server.Runner.UpdateSecret:input_type -> server.Secret + 44, // 90: server.Runner.PProf:input_type -> server.PProfRequest + 8, // 91: server.RunnerExtension.Run:input_type -> server.TestSuiteWithCase + 48, // 92: server.Mock.Reload:input_type -> server.MockConfig + 47, // 93: server.Mock.GetConfig:input_type -> server.Empty + 16, // 94: server.Runner.Run:output_type -> server.TestResult + 16, // 95: server.Runner.RunTestSuite:output_type -> server.TestResult + 0, // 96: server.Runner.GetSuites:output_type -> server.Suites + 18, // 97: server.Runner.CreateTestSuite:output_type -> server.HelloReply + 37, // 98: server.Runner.ImportTestSuite:output_type -> server.CommonResult + 7, // 99: server.Runner.GetTestSuite:output_type -> server.TestSuite + 18, // 100: server.Runner.UpdateTestSuite:output_type -> server.HelloReply + 18, // 101: server.Runner.DeleteTestSuite:output_type -> server.HelloReply + 18, // 102: server.Runner.DuplicateTestSuite:output_type -> server.HelloReply + 19, // 103: server.Runner.GetTestSuiteYaml:output_type -> server.YamlData + 20, // 104: server.Runner.ListTestCase:output_type -> server.Suite + 29, // 105: server.Runner.RunTestCase:output_type -> server.TestCaseResult + 23, // 106: server.Runner.GetTestCase:output_type -> server.TestCase + 18, // 107: server.Runner.CreateTestCase:output_type -> server.HelloReply + 18, // 108: server.Runner.UpdateTestCase:output_type -> server.HelloReply + 18, // 109: server.Runner.DeleteTestCase:output_type -> server.HelloReply + 18, // 110: server.Runner.DuplicateTestCase:output_type -> server.HelloReply + 22, // 111: server.Runner.GetSuggestedAPIs:output_type -> server.TestCases + 2, // 112: server.Runner.GetHistorySuites:output_type -> server.HistorySuites + 17, // 113: server.Runner.GetHistoryTestCaseWithResult:output_type -> server.HistoryTestResult + 24, // 114: server.Runner.GetHistoryTestCase:output_type -> server.HistoryTestCase + 18, // 115: server.Runner.DeleteHistoryTestCase:output_type -> server.HelloReply + 18, // 116: server.Runner.DeleteAllHistoryTestCase:output_type -> server.HelloReply + 25, // 117: server.Runner.GetTestCaseAllHistory:output_type -> server.HistoryTestCases + 38, // 118: server.Runner.ListCodeGenerator:output_type -> server.SimpleList + 37, // 119: server.Runner.GenerateCode:output_type -> server.CommonResult + 37, // 120: server.Runner.HistoryGenerateCode:output_type -> server.CommonResult + 38, // 121: server.Runner.ListConverter:output_type -> server.SimpleList + 37, // 122: server.Runner.ConvertTestSuite:output_type -> server.CommonResult + 31, // 123: server.Runner.PopularHeaders:output_type -> server.Pairs + 31, // 124: server.Runner.FunctionsQuery:output_type -> server.Pairs + 31, // 125: server.Runner.FunctionsQueryStream:output_type -> server.Pairs + 49, // 126: server.Runner.GetVersion:output_type -> server.Version + 18, // 127: server.Runner.Sample:output_type -> server.HelloReply + 46, // 128: server.Runner.DownloadResponseFile:output_type -> server.FileData + 35, // 129: server.Runner.GetStoreKinds:output_type -> server.StoreKinds + 33, // 130: server.Runner.GetStores:output_type -> server.Stores + 34, // 131: server.Runner.CreateStore:output_type -> server.Store + 34, // 132: server.Runner.UpdateStore:output_type -> server.Store + 34, // 133: server.Runner.DeleteStore:output_type -> server.Store + 43, // 134: server.Runner.VerifyStore:output_type -> server.ExtensionStatus + 41, // 135: server.Runner.GetSecrets:output_type -> server.Secrets + 37, // 136: server.Runner.CreateSecret:output_type -> server.CommonResult + 37, // 137: server.Runner.DeleteSecret:output_type -> server.CommonResult + 37, // 138: server.Runner.UpdateSecret:output_type -> server.CommonResult + 45, // 139: server.Runner.PProf:output_type -> server.PProfData + 37, // 140: server.RunnerExtension.Run:output_type -> server.CommonResult + 47, // 141: server.Mock.Reload:output_type -> server.Empty + 48, // 142: server.Mock.GetConfig:output_type -> server.MockConfig + 94, // [94:143] is the sub-list for method output_type + 45, // [45:94] is the sub-list for method input_type + 45, // [45:45] is the sub-list for extension type_name + 45, // [45:45] is the sub-list for extension extendee + 0, // [0:45] is the sub-list for field type_name } func init() { file_pkg_server_server_proto_init() } diff --git a/pkg/server/server.proto b/pkg/server/server.proto index 1bf09e281..089c502f2 100644 --- a/pkg/server/server.proto +++ b/pkg/server/server.proto @@ -445,6 +445,7 @@ message HistoryTestCase { Request request = 8; Response response = 9; string ID = 10; + repeated Pair historyHeader = 11; } message HistoryTestCases{ diff --git a/pkg/server/server.swagger.json b/pkg/server/server.swagger.json index 82db45182..4a4185ae1 100644 --- a/pkg/server/server.swagger.json +++ b/pkg/server/server.swagger.json @@ -2738,6 +2738,13 @@ }, "ID": { "type": "string" + }, + "historyHeader": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/serverPair" + } } } }, diff --git a/pkg/testing/case.go b/pkg/testing/case.go index 0e83ae6b8..8eefd957b 100644 --- a/pkg/testing/case.go +++ b/pkg/testing/case.go @@ -55,6 +55,7 @@ type HistoryTestCase struct { SuiteSpec APISpec `yaml:"spec,omitempty" json:"spec,omitempty"` SuiteParam map[string]string `yaml:"param,omitempty" json:"param,omitempty"` Data TestCase `yaml:"data,omitempty" json:"data,omitempty"` + HistoryHeader map[string]string `yaml:"historyHeader,omitempty" json:"historyHeader,omitempty"` } type HistoryTestResult struct { diff --git a/pkg/testing/loader.go b/pkg/testing/loader.go index 1e4b8ff5e..ef663acad 100644 --- a/pkg/testing/loader.go +++ b/pkg/testing/loader.go @@ -38,7 +38,7 @@ type Writer interface { DeleteTestCase(suite, testcase string) (err error) ListHistoryTestSuite() (suites []HistoryTestSuite, err error) - CreateHistoryTestCase(testcaseResult TestCaseResult, suiteName *TestSuite) (err error) + CreateHistoryTestCase(testcaseResult TestCaseResult, suite *TestSuite, historyHeader map[string]string) (err error) GetHistoryTestCaseWithResult(id string) (historyTestCase HistoryTestResult, err error) GetHistoryTestCase(id string) (historyTestCase HistoryTestCase, err error) DeleteHistoryTestCase(id string) (err error) diff --git a/pkg/testing/loader_file.go b/pkg/testing/loader_file.go index 90f9783dd..f31653a4f 100644 --- a/pkg/testing/loader_file.go +++ b/pkg/testing/loader_file.go @@ -429,7 +429,7 @@ func (l *fileLoader) DeleteTestCase(suiteName, testcase string) (err error) { return } -func (l *fileLoader) CreateHistoryTestCase(testcaseResult TestCaseResult, suiteName *TestSuite) (err error) { // always be okay +func (l *fileLoader) CreateHistoryTestCase(testcaseResult TestCaseResult, suiteName *TestSuite, historyHeader map[string]string ) (err error) { // always be okay return } diff --git a/pkg/testing/loader_non.go b/pkg/testing/loader_non.go index d5dea821e..7faa25929 100644 --- a/pkg/testing/loader_non.go +++ b/pkg/testing/loader_non.go @@ -100,7 +100,7 @@ func (l *nonLoader) DeleteTestCase(suiteName, testcase string) (err error) { return } -func (l *nonLoader) CreateHistoryTestCase(testcaseResult TestCaseResult, suiteName *TestSuite) (err error) { +func (l *nonLoader) CreateHistoryTestCase(testcaseResult TestCaseResult, suiteName *TestSuite, historyHeader map[string]string ) (err error) { return } diff --git a/pkg/testing/remote/converter.go b/pkg/testing/remote/converter.go index d9620d3a0..d94d4d88b 100644 --- a/pkg/testing/remote/converter.go +++ b/pkg/testing/remote/converter.go @@ -140,13 +140,14 @@ func ConvertToNormalTestCase(testcase *server.TestCase) (result testing.TestCase func ConvertToNormalHistoryTestCase(testcase *server.HistoryTestCase) (result testing.HistoryTestCase) { result = testing.HistoryTestCase{ - ID: testcase.ID, - SuiteName: testcase.SuiteName, - CaseName: testcase.CaseName, - SuiteAPI: testcase.SuiteApi, - SuiteParam: pairToMap(testcase.SuiteParam), - SuiteSpec: ConvertToNormalTestSuiteSpec(testcase.SuiteSpec), - CreateTime: testcase.CreateTime.AsTime(), + ID: testcase.ID, + SuiteName: testcase.SuiteName, + CaseName: testcase.CaseName, + SuiteAPI: testcase.SuiteApi, + SuiteParam: pairToMap(testcase.SuiteParam), + SuiteSpec: ConvertToNormalTestSuiteSpec(testcase.SuiteSpec), + CreateTime: testcase.CreateTime.AsTime(), + HistoryHeader: pairToMap(testcase.HistoryHeader), } result.Data.Name = testcase.CaseName if testcase.Request != nil { @@ -227,10 +228,11 @@ func ConvertToGRPCHistoryTestCase(historyTestcase testing.HistoryTestCase) (resu req := historyTestcase.Data.Request res := historyTestcase.Data.Expect result = &server.HistoryTestCase{ - CaseName: historyTestcase.CaseName, - SuiteName: historyTestcase.SuiteName, - SuiteApi: historyTestcase.SuiteAPI, - SuiteParam: mapToPair(historyTestcase.SuiteParam), + CaseName: historyTestcase.CaseName, + SuiteName: historyTestcase.SuiteName, + SuiteApi: historyTestcase.SuiteAPI, + SuiteParam: mapToPair(historyTestcase.SuiteParam), + HistoryHeader: mapToPair(historyTestcase.HistoryHeader), Request: &server.Request{ Api: req.API, @@ -300,7 +302,7 @@ func pairToInterMap(pairs []*server.Pair) (data map[string]interface{}) { return } -func ConvertToGRPCHistoryTestCaseResult(testCaseResult testing.TestCaseResult, testSuite *testing.TestSuite) (result *server.HistoryTestResult) { +func ConvertToGRPCHistoryTestCaseResult(testCaseResult testing.TestCaseResult, testSuite *testing.TestSuite, historyHeader map[string]string) (result *server.HistoryTestResult) { result = &server.HistoryTestResult{ Error: testCaseResult.Error, CreateTime: timestamppb.New(time.Now()), @@ -318,12 +320,13 @@ func ConvertToGRPCHistoryTestCaseResult(testCaseResult testing.TestCaseResult, t for _, testCase := range testSuite.Items { data := testing.HistoryTestCase{ - CaseName: testCase.Name, - SuiteName: testSuite.Name, - SuiteAPI: testSuite.API, - SuiteSpec: testSuite.Spec, - SuiteParam: testSuite.Param, - Data: testCase, + CaseName: testCase.Name, + SuiteName: testSuite.Name, + SuiteAPI: testSuite.API, + SuiteSpec: testSuite.Spec, + SuiteParam: testSuite.Param, + Data: testCase, + HistoryHeader: historyHeader, } result.Data = ConvertToGRPCHistoryTestCase(data) diff --git a/pkg/testing/remote/converter_test.go b/pkg/testing/remote/converter_test.go index a54f6e2ff..679671208 100644 --- a/pkg/testing/remote/converter_test.go +++ b/pkg/testing/remote/converter_test.go @@ -147,8 +147,9 @@ func TestConvert(t *testing.T) { t.Run("convertToNormalHistoryTestCase", func(t *testing.T) { assert.Equal(t, atest.HistoryTestCase{ - CreateTime: now, - SuiteParam: defaultMap, + CreateTime: now, + SuiteParam: defaultMap, + HistoryHeader: map[string]string{}, SuiteSpec: atest.APISpec{ Kind: "http", URL: "/v1", @@ -204,8 +205,9 @@ func TestConvert(t *testing.T) { HistorySuiteName: "fake", Items: []atest.HistoryTestCase{ { - CreateTime: now, - SuiteParam: defaultMap, + CreateTime: now, + SuiteParam: defaultMap, + HistoryHeader: map[string]string{}, SuiteSpec: atest.APISpec{ Kind: "http", URL: "/v1", @@ -283,7 +285,7 @@ func TestConvert(t *testing.T) { }, }, }, - }) + }, map[string]string{}) assert.Equal(t, defaultPairs, result.Data.SuiteParam) assert.Equal(t, defaultPairs, result.Data.Request.Header) assert.Equal(t, defaultPairs, result.Data.Response.BodyFieldsExpect) @@ -296,8 +298,9 @@ func TestConvert(t *testing.T) { assert.Equal(t, atest.HistoryTestResult{ CreateTime: now, Data: atest.HistoryTestCase{ - SuiteParam: defaultMap, - CreateTime: now, + SuiteParam: defaultMap, + CreateTime: now, + HistoryHeader: map[string]string{}, }, TestCaseResult: []atest.TestCaseResult{ { diff --git a/pkg/testing/remote/grpc_store.go b/pkg/testing/remote/grpc_store.go index dd3410f23..b63f9ac11 100644 --- a/pkg/testing/remote/grpc_store.go +++ b/pkg/testing/remote/grpc_store.go @@ -163,8 +163,8 @@ func (g *gRPCLoader) DeleteTestCase(suite, testcase string) (err error) { return } -func (g *gRPCLoader) CreateHistoryTestCase(testcaseResult testing.TestCaseResult, testSuite *testing.TestSuite) (err error) { - payload := ConvertToGRPCHistoryTestCaseResult(testcaseResult, testSuite) +func (g *gRPCLoader) CreateHistoryTestCase(testcaseResult testing.TestCaseResult, testSuite *testing.TestSuite, historyHeader map[string]string ) (err error) { + payload := ConvertToGRPCHistoryTestCaseResult(testcaseResult, testSuite, historyHeader) _, err = g.client.CreateTestCaseHistory(g.ctx, payload) return } diff --git a/pkg/testing/remote/grpc_store_test.go b/pkg/testing/remote/grpc_store_test.go index f243a3092..bc0c2d710 100644 --- a/pkg/testing/remote/grpc_store_test.go +++ b/pkg/testing/remote/grpc_store_test.go @@ -90,7 +90,7 @@ func TestNewGRPCLoader(t *testing.T) { _, err = writer.ListHistoryTestSuite() assert.Error(t, err) - err = writer.CreateHistoryTestCase(atest.TestCaseResult{}, &atest.TestSuite{}) + err = writer.CreateHistoryTestCase(atest.TestCaseResult{}, &atest.TestSuite{}, map[string]string{}) assert.Error(t, err) _, err = writer.GetHistoryTestCase("") From 5b662f34c4ee008506b0d577b2c74ad426fa7e12 Mon Sep 17 00:00:00 2001 From: ysf <1807100869@qq.com> Date: Sun, 15 Sep 2024 09:25:08 +0800 Subject: [PATCH 14/15] fix: add e2e image prefix --- console/atest-ui/src/locales/zh.json | 2 +- e2e/entrypoint.sh | 2 +- pkg/server/convert.go | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/console/atest-ui/src/locales/zh.json b/console/atest-ui/src/locales/zh.json index 93801f5f5..3ab04e62f 100644 --- a/console/atest-ui/src/locales/zh.json +++ b/console/atest-ui/src/locales/zh.json @@ -26,7 +26,7 @@ "viewHistory": "查看历史记录", "revert": "回退", "goToHistory": "跳转历史记录", - "deleteAllHistory": "删除所有历史记录" + "deleteAllHistory": "删除所有历史记录" }, "title": { "createTestSuite": "创建测试用例集", diff --git a/e2e/entrypoint.sh b/e2e/entrypoint.sh index 652df543d..d9845aaa9 100755 --- a/e2e/entrypoint.sh +++ b/e2e/entrypoint.sh @@ -26,7 +26,7 @@ openssl x509 -req -days 365 -in test.csr \ echo "start to download extenions" atest extension --output /usr/local/bin --registry ghcr.io git -atest extension --output /usr/local/bin --registry ghcr.io orm +atest extension --output /usr/local/bin --registry registry-1.docker.io orm --image-prefix ysf233 atest extension --output /usr/local/bin --registry ghcr.io etcd atest extension --output /usr/local/bin --registry ghcr.io mongodb diff --git a/pkg/server/convert.go b/pkg/server/convert.go index 4f1b9f158..96184e3f3 100644 --- a/pkg/server/convert.go +++ b/pkg/server/convert.go @@ -19,7 +19,6 @@ import ( "strings" "google.golang.org/protobuf/types/known/timestamppb" - "github.com/linuxsuren/api-testing/pkg/testing" "github.com/linuxsuren/api-testing/pkg/util" ) From d689d3eb6532bf7b83c693d93ec1ede0afee3743 Mon Sep 17 00:00:00 2001 From: Rick <1450685+LinuxSuRen@users.noreply.github.com> Date: Wed, 18 Sep 2024 17:09:54 +0800 Subject: [PATCH 15/15] Update entrypoint.sh Signed-off-by: Rick <1450685+LinuxSuRen@users.noreply.github.com> --- e2e/entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/entrypoint.sh b/e2e/entrypoint.sh index d9845aaa9..652df543d 100755 --- a/e2e/entrypoint.sh +++ b/e2e/entrypoint.sh @@ -26,7 +26,7 @@ openssl x509 -req -days 365 -in test.csr \ echo "start to download extenions" atest extension --output /usr/local/bin --registry ghcr.io git -atest extension --output /usr/local/bin --registry registry-1.docker.io orm --image-prefix ysf233 +atest extension --output /usr/local/bin --registry ghcr.io orm atest extension --output /usr/local/bin --registry ghcr.io etcd atest extension --output /usr/local/bin --registry ghcr.io mongodb