summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorFabricio Voznika <fvoznika@google.com>2020-08-19 11:43:24 -0700
committergVisor bot <gvisor-bot@google.com>2020-08-19 11:45:46 -0700
commit41777e90ea6a48eadbfdedc71029a634e1a23b5f (patch)
treeb331047f387a42627f5516c1d84616e9e670513f
parent33317222917d805edd71f0d2ddd7a208bd57fc4c (diff)
Change runtimeoptions proto handling.
Stolen from cl/327337408 (ascannell is OOO) PiperOrigin-RevId: 327475423
-rw-r--r--pkg/shim/v2/runtimeoptions/BUILD16
-rw-r--r--pkg/shim/v2/runtimeoptions/runtimeoptions.go3
-rw-r--r--pkg/shim/v2/runtimeoptions/runtimeoptions.proto4
-rw-r--r--pkg/shim/v2/runtimeoptions/runtimeoptions_test.go52
4 files changed, 71 insertions, 4 deletions
diff --git a/pkg/shim/v2/runtimeoptions/BUILD b/pkg/shim/v2/runtimeoptions/BUILD
index 01716034c..ba2ed1ea7 100644
--- a/pkg/shim/v2/runtimeoptions/BUILD
+++ b/pkg/shim/v2/runtimeoptions/BUILD
@@ -1,4 +1,4 @@
-load("//tools:defs.bzl", "go_library", "proto_library")
+load("//tools:defs.bzl", "go_library", "go_test", "proto_library")
package(licenses = ["notice"])
@@ -14,7 +14,19 @@ go_library(
srcs = ["runtimeoptions.go"],
visibility = ["//pkg/shim/v2:__pkg__"],
deps = [
- "//pkg/shim/v2/runtimeoptions:api_go_proto",
+ ":api_go_proto",
"@com_github_gogo_protobuf//proto:go_default_library",
],
)
+
+go_test(
+ name = "runtimeoptions_test",
+ size = "small",
+ srcs = ["runtimeoptions_test.go"],
+ library = ":runtimeoptions",
+ deps = [
+ "@com_github_containerd_containerd//runtime/v1/shim/v1:go_default_library",
+ "@com_github_containerd_typeurl//:go_default_library",
+ "@com_github_golang_protobuf//proto:go_default_library",
+ ],
+)
diff --git a/pkg/shim/v2/runtimeoptions/runtimeoptions.go b/pkg/shim/v2/runtimeoptions/runtimeoptions.go
index 1c1a0c5d1..aaf17b87a 100644
--- a/pkg/shim/v2/runtimeoptions/runtimeoptions.go
+++ b/pkg/shim/v2/runtimeoptions/runtimeoptions.go
@@ -23,5 +23,8 @@ import (
type Options = pb.Options
func init() {
+ // The generated proto file auto registers with "golang/protobuf/proto"
+ // package. However, typeurl uses "golang/gogo/protobuf/proto". So registers
+ // the type there too.
proto.RegisterType((*Options)(nil), "cri.runtimeoptions.v1.Options")
}
diff --git a/pkg/shim/v2/runtimeoptions/runtimeoptions.proto b/pkg/shim/v2/runtimeoptions/runtimeoptions.proto
index edb19020a..057032e34 100644
--- a/pkg/shim/v2/runtimeoptions/runtimeoptions.proto
+++ b/pkg/shim/v2/runtimeoptions/runtimeoptions.proto
@@ -14,11 +14,11 @@
syntax = "proto3";
-package runtimeoptions;
+package cri.runtimeoptions.v1;
// This is a version of the runtimeoptions CRI API that is vendored.
//
-// Imported the full CRI package is a nightmare.
+// Importing the full CRI package is a nightmare.
message Options {
string type_url = 1;
string config_path = 2;
diff --git a/pkg/shim/v2/runtimeoptions/runtimeoptions_test.go b/pkg/shim/v2/runtimeoptions/runtimeoptions_test.go
new file mode 100644
index 000000000..f4c238a00
--- /dev/null
+++ b/pkg/shim/v2/runtimeoptions/runtimeoptions_test.go
@@ -0,0 +1,52 @@
+// Copyright 2020 The gVisor Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package runtimeoptions
+
+import (
+ "testing"
+
+ shim "github.com/containerd/containerd/runtime/v1/shim/v1"
+ "github.com/containerd/typeurl"
+ "github.com/golang/protobuf/proto"
+)
+
+func TestCreateTaskRequest(t *testing.T) {
+ // Serialize the top-level message.
+ const encodedText = `options: <
+ type_url: "cri.runtimeoptions.v1.Options"
+ value: "\n\010type_url\022\013config_path"
+>`
+ got := &shim.CreateTaskRequest{} // Should have raw options.
+ if err := proto.UnmarshalText(encodedText, got); err != nil {
+ t.Fatalf("unable to unmarshal text: %v", err)
+ }
+ t.Logf("got: %s", proto.MarshalTextString(got))
+
+ // Check the options.
+ wantOptions := &Options{}
+ wantOptions.TypeUrl = "type_url"
+ wantOptions.ConfigPath = "config_path"
+ gotMessage, err := typeurl.UnmarshalAny(got.Options)
+ if err != nil {
+ t.Fatalf("unable to unmarshal any: %v", err)
+ }
+ gotOptions, ok := gotMessage.(*Options)
+ if !ok {
+ t.Fatalf("got %v, want %v", gotMessage, wantOptions)
+ }
+ if !proto.Equal(gotOptions, wantOptions) {
+ t.Fatalf("got %v, want %v", gotOptions, wantOptions)
+ }
+}