diff options
Diffstat (limited to 'pkg/p9/p9test/BUILD')
-rw-r--r-- | pkg/p9/p9test/BUILD | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/pkg/p9/p9test/BUILD b/pkg/p9/p9test/BUILD new file mode 100644 index 000000000..7ca67cb19 --- /dev/null +++ b/pkg/p9/p9test/BUILD @@ -0,0 +1,88 @@ +load("//tools:defs.bzl", "go_binary", "go_library", "go_test") + +package(licenses = ["notice"]) + +alias( + name = "mockgen", + actual = "@com_github_golang_mock//mockgen:mockgen", +) + +MOCK_SRC_PACKAGE = "gvisor.dev/gvisor/pkg/p9" + +# mockgen_reflect is a source file that contains mock generation code that +# imports the p9 package and generates a specification via reflection. The +# usual generation path must be split into two distinct parts because the full +# source tree is not available to all build targets. Only declared depencies +# are available (and even then, not the Go source files). +genrule( + name = "mockgen_reflect", + testonly = 1, + outs = ["mockgen_reflect.go"], + cmd = ( + "$(location :mockgen) " + + "-package p9test " + + "-prog_only " + MOCK_SRC_PACKAGE + " " + + "Attacher,File > $@" + ), + tools = [":mockgen"], +) + +# mockgen_exec is the binary that includes the above reflection generator. +# Running this binary will emit an encoded version of the p9 Attacher and File +# structures. This is consumed by the mocks genrule, below. +go_binary( + name = "mockgen_exec", + testonly = 1, + srcs = ["mockgen_reflect.go"], + deps = [ + "//pkg/p9", + "@com_github_golang_mock//mockgen/model:go_default_library", + ], +) + +# mocks consumes the encoded output above, and generates the full source for a +# set of mocks. These are included directly in the p9test library. +genrule( + name = "mocks", + testonly = 1, + outs = ["mocks.go"], + cmd = ( + "$(location :mockgen) " + + "-package p9test " + + "-exec_only $(location :mockgen_exec) " + MOCK_SRC_PACKAGE + " File > $@" + ), + tools = [ + ":mockgen", + ":mockgen_exec", + ], +) + +go_library( + name = "p9test", + srcs = [ + "mocks.go", + "p9test.go", + ], + visibility = ["//:sandbox"], + deps = [ + "//pkg/fd", + "//pkg/log", + "//pkg/p9", + "//pkg/sync", + "//pkg/unet", + "@com_github_golang_mock//gomock:go_default_library", + ], +) + +go_test( + name = "client_test", + size = "medium", + srcs = ["client_test.go"], + library = ":p9test", + deps = [ + "//pkg/fd", + "//pkg/p9", + "//pkg/sync", + "@com_github_golang_mock//gomock:go_default_library", + ], +) |