diff --git a/Makefile b/Makefile
index 1cdc4a1d268d03bc5f7e983a64b3ab19fc790a87..bc47d98931ab7790f6d394c85118f33af561d912 100644
--- a/Makefile
+++ b/Makefile
@@ -666,6 +666,7 @@ libs-$(CONFIG_API) += api/
 libs-$(CONFIG_HAS_POST) += post/
 libs-y += test/
 libs-y += test/dm/
+libs-$(CONFIG_UT_ENV) += test/env/
 
 libs-y += $(if $(BOARDDIR),board/$(BOARDDIR)/)
 
diff --git a/include/test/env.h b/include/test/env.h
new file mode 100644
index 0000000000000000000000000000000000000000..2b0cd682e460f10d82fce7ef6edc408a5caa4cbd
--- /dev/null
+++ b/include/test/env.h
@@ -0,0 +1,16 @@
+/*
+ * (C) Copyright 2015
+ * Joe Hershberger, National Instruments, joe.hershberger@ni.com
+ *
+ * SPDX-License-Identifier:	GPL-2.0
+ */
+
+#ifndef __TEST_ENV_H__
+#define __TEST_ENV_H__
+
+#include <test/test.h>
+
+/* Declare a new environment test */
+#define ENV_TEST(_name, _flags)	UNIT_TEST(_name, _flags, env_test)
+
+#endif /* __TEST_ENV_H__ */
diff --git a/include/test/suites.h b/include/test/suites.h
index f68cdec12aa71f977552fa0d9e855fb41bfcb4f8..f5790333ff8e62183e793e105217af3f6738c1ce 100644
--- a/include/test/suites.h
+++ b/include/test/suites.h
@@ -9,6 +9,7 @@
 #define __TEST_SUITES_H__
 
 int do_ut_dm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
+int do_ut_env(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
 int do_ut_time(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
 
 #endif /* __TEST_SUITES_H__ */
diff --git a/test/Kconfig b/test/Kconfig
index 50d3a49c97470a60bf7686569d9f716c5f5ca8e6..d71c332eee27cc51fcc839163a81ae64c241e130 100644
--- a/test/Kconfig
+++ b/test/Kconfig
@@ -16,3 +16,4 @@ config UT_TIME
 	  this is a good place to start.
 
 source "test/dm/Kconfig"
+source "test/env/Kconfig"
diff --git a/test/cmd_ut.c b/test/cmd_ut.c
index a65bfeaf3122da5068d5d37e051995068f94d5a1..f6e1f413db7f6f472d9609d728b0c40e8d347f41 100644
--- a/test/cmd_ut.c
+++ b/test/cmd_ut.c
@@ -16,6 +16,9 @@ static cmd_tbl_t cmd_ut_sub[] = {
 #if defined(CONFIG_UT_DM)
 	U_BOOT_CMD_MKENT(dm, CONFIG_SYS_MAXARGS, 1, do_ut_dm, "", ""),
 #endif
+#if defined(CONFIG_UT_ENV)
+	U_BOOT_CMD_MKENT(env, CONFIG_SYS_MAXARGS, 1, do_ut_env, "", ""),
+#endif
 #ifdef CONFIG_UT_TIME
 	U_BOOT_CMD_MKENT(time, CONFIG_SYS_MAXARGS, 1, do_ut_time, "", ""),
 #endif
@@ -62,6 +65,9 @@ static char ut_help_text[] =
 #ifdef CONFIG_UT_DM
 	"ut dm [test-name]\n"
 #endif
+#ifdef CONFIG_UT_ENV
+	"ut env [test-name]\n"
+#endif
 #ifdef CONFIG_UT_TIME
 	"ut time - Very basic test of time functions\n"
 #endif
diff --git a/test/env/Kconfig b/test/env/Kconfig
new file mode 100644
index 0000000000000000000000000000000000000000..ff164132e935f986e97a844406dcc525621361dc
--- /dev/null
+++ b/test/env/Kconfig
@@ -0,0 +1,8 @@
+config UT_ENV
+	bool "Enable env unit tests"
+	depends on UNIT_TEST
+	help
+	  This enables the 'ut env' command which runs a series of unit
+	  tests on the env code.
+	  If all is well then all tests pass although there will be a few
+	  messages printed along the way.
diff --git a/test/env/Makefile b/test/env/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..59b38e99ae8718bdfb9695e8f476b059d1dac06a
--- /dev/null
+++ b/test/env/Makefile
@@ -0,0 +1,7 @@
+#
+# Copyright (c) 2015 National Instruments, Inc
+#
+# SPDX-License-Identifier:	GPL-2.0+
+#
+
+obj-y += cmd_ut_env.o
diff --git a/test/env/cmd_ut_env.c b/test/env/cmd_ut_env.c
new file mode 100644
index 0000000000000000000000000000000000000000..893e5e6a6d6def70d11352ddf8fa23b1c6979aae
--- /dev/null
+++ b/test/env/cmd_ut_env.c
@@ -0,0 +1,37 @@
+/*
+ * (C) Copyright 2015
+ * Joe Hershberger, National Instruments, joe.hershberger@ni.com
+ *
+ * SPDX-License-Identifier:	GPL-2.0
+ */
+
+#include <common.h>
+#include <command.h>
+#include <test/env.h>
+#include <test/suites.h>
+#include <test/ut.h>
+
+int do_ut_env(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+	struct unit_test *tests = ll_entry_start(struct unit_test, env_test);
+	const int n_ents = ll_entry_count(struct unit_test, env_test);
+	struct unit_test_state uts = { .fail_count = 0 };
+	struct unit_test *test;
+
+	if (argc == 1)
+		printf("Running %d environment tests\n", n_ents);
+
+	for (test = tests; test < tests + n_ents; test++) {
+		if (argc > 1 && strcmp(argv[1], test->name))
+			continue;
+		printf("Test: %s\n", test->name);
+
+		uts.start = mallinfo();
+
+		test->func(&uts);
+	}
+
+	printf("Failures: %d\n", uts.fail_count);
+
+	return uts.fail_count ? CMD_RET_FAILURE : 0;
+}