diff --git a/test/run_storage.cxx b/test/run_storage.cxx
index 9db2215f4..e668c7347 100644
--- a/test/run_storage.cxx
+++ b/test/run_storage.cxx
@@ -90,6 +90,29 @@ Ls(Storage &storage, const char *path)
 	return EXIT_SUCCESS;
 }
 
+static int
+Stat(Storage &storage, const char *path)
+{
+	const auto info = storage.GetInfo(path, false);
+	switch (info.type) {
+	case StorageFileInfo::Type::OTHER:
+		printf("other\n");
+		break;
+
+	case StorageFileInfo::Type::REGULAR:
+		printf("regular\n");
+		break;
+
+	case StorageFileInfo::Type::DIRECTORY:
+		printf("directory\n");
+		break;
+	}
+
+	printf("size: %llu\n", (unsigned long long)info.size);
+
+	return EXIT_SUCCESS;
+}
+
 int
 main(int argc, char **argv)
 try {
@@ -117,6 +140,18 @@ try {
 					   storage_uri);
 
 		return Ls(*storage, path);
+	} else if (strcmp(command, "stat") == 0) {
+		if (argc != 4) {
+			fprintf(stderr, "Usage: run_storage stat URI PATH\n");
+			return EXIT_FAILURE;
+		}
+
+		const char *const path = argv[3];
+
+		auto storage = MakeStorage(io_thread.GetEventLoop(),
+					   storage_uri);
+
+		return Stat(*storage, path);
 	} else {
 		fprintf(stderr, "Unknown command\n");
 		return EXIT_FAILURE;