osbase/blockdev: add tests, fix minor issues

Add a lot of bounds checks which should make BlockDev safer to use. Fix
a bug in the ReadWriteSeeker.Seek function with io.SeekEnd; the offset
should be added to, not subtracted from the size. Add the Sync()
function to the BlockDev interface.

Change-Id: I247095b3dbc6410064844b4ac7c6208d88a7abcd
Reviewed-on: https://review.monogon.dev/c/monogon/+/3338
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/osbase/blockdev/BUILD.bazel b/osbase/blockdev/BUILD.bazel
index 0805ef6..f476e8b 100644
--- a/osbase/blockdev/BUILD.bazel
+++ b/osbase/blockdev/BUILD.bazel
@@ -1,4 +1,5 @@
-load("@io_bazel_rules_go//go:def.bzl", "go_library")
+load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
+load("//osbase/test/ktest:ktest.bzl", "ktest")
 
 go_library(
     name = "blockdev",
@@ -26,3 +27,25 @@
         "//conditions:default": [],
     }),
 )
+
+go_test(
+    name = "blockdev_test",
+    srcs = [
+        "blockdev_linux_test.go",
+        "blockdev_test.go",
+    ],
+    embed = [":blockdev"],
+    deps = select({
+        "@io_bazel_rules_go//go/platform:android": [
+            "//osbase/loop",
+        ],
+        "@io_bazel_rules_go//go/platform:linux": [
+            "//osbase/loop",
+        ],
+        "//conditions:default": [],
+    }),
+)
+
+ktest(
+    tester = ":blockdev_test",
+)