diff --git a/meta-google/recipes-google/test/test-sh/lib.sh b/meta-google/recipes-google/test/test-sh/lib.sh
new file mode 100755
index 0000000..cc04c5d
--- /dev/null
+++ b/meta-google/recipes-google/test/test-sh/lib.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+# Copyright 2021 Google LLC
+#
+# 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
+#
+#      http://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.
+
+expect_streq() {
+  local r="${2-$(cat)}"
+  [ "$1" = "$r" ] && return
+  echo "  Line ${BASH_LINENO[0]} '$1' != '$r'" >&2
+  test_err=1
+}
+
+expect_numeq() {
+  (( "$1" == "$2" )) && return
+  echo "  Line ${BASH_LINENO[0]} '$1' != '$2'" >&2
+  test_err=1
+}
+
+expect_err() {
+  local expected=$1
+  shift
+  local rc=0
+  "$@" || rc="$?"
+  (( rc == expected )) && return
+  echo "  Line ${BASH_LINENO[0]} Status '$rc' != '$expected'" >&2
+  test_err=1
+}
+
+fail() {
+  echo "  Line ${BASH_LINENO[0]} Fail" >&2
+  test_err=1
+}
+
+main() {
+  local agg_err=0
+  for f in $(declare -F | grep 'declare -f test[A-Z_]' | awk '{print $3}'); do
+    echo "[$f] Running..." >&2
+    local test_err=0
+    if "$f" && (( test_err == 0 )); then
+      echo "[$f] Success" >&2
+    else
+      echo "[$f] Failed ($?)" >&2
+      agg_err=1
+    fi
+  done
+  return $agg_err
+}
