/// <summary>
        /// Run the automated tests
        /// </summary>
        public override void ExecuteBuild()
        {
            // Get all the shared directories
            DirectoryReference RootDir = new DirectoryReference(CommandUtils.CmdEnv.LocalRoot);

            DirectoryReference LocalDir = DirectoryReference.Combine(RootDir, "Engine", "Saved", "TestTempStorage-Local");

            CommandUtils.CreateDirectory_NoExceptions(LocalDir.FullName);
            CommandUtils.DeleteDirectoryContents(LocalDir.FullName);

            DirectoryReference SharedDir = DirectoryReference.Combine(RootDir, "Engine", "Saved", "TestTempStorage-Shared");

            CommandUtils.CreateDirectory_NoExceptions(SharedDir.FullName);
            CommandUtils.DeleteDirectoryContents(SharedDir.FullName);

            DirectoryReference WorkingDir = DirectoryReference.Combine(RootDir, "Engine", "Saved", "TestTempStorage-Working");

            CommandUtils.CreateDirectory_NoExceptions(WorkingDir.FullName);
            CommandUtils.DeleteDirectoryContents(WorkingDir.FullName);

            // Create the temp storage object
            TempStorage TempStore = new TempStorage(WorkingDir, LocalDir, SharedDir, true);

            // Create a working directory, and copy some source files into it
            DirectoryReference SourceDir = DirectoryReference.Combine(RootDir, "Engine", "Source", "Runtime");

            if (!CommandUtils.CopyDirectory_NoExceptions(SourceDir.FullName, WorkingDir.FullName, true))
            {
                throw new AutomationException("Couldn't copy {0} to {1}", SourceDir.FullName, WorkingDir.FullName);
            }

            // Save the default output
            Dictionary <FileReference, DateTime> DefaultOutput = SelectFiles(WorkingDir, 'a', 'f');

            TempStore.Archive("TestNode", null, DefaultOutput.Keys.ToArray(), false);

            Dictionary <FileReference, DateTime> NamedOutput = SelectFiles(WorkingDir, 'g', 'i');

            TempStore.Archive("TestNode", "NamedOutput", NamedOutput.Keys.ToArray(), true);

            // Check both outputs are still ok
            TempStorageManifest DefaultManifest = TempStore.Retreive("TestNode", null);

            CheckManifest(WorkingDir, DefaultManifest, DefaultOutput);

            TempStorageManifest NamedManifest = TempStore.Retreive("TestNode", "NamedOutput");

            CheckManifest(WorkingDir, NamedManifest, NamedOutput);

            // Delete local temp storage and the working directory and try again
            CommandUtils.Log("Clearing local folders...");
            CommandUtils.DeleteDirectoryContents(WorkingDir.FullName);
            CommandUtils.DeleteDirectoryContents(LocalDir.FullName);

            // First output should fail
            CommandUtils.Log("Checking default manifest is now unavailable...");
            bool bGotManifest = false;

            try
            {
                TempStore.Retreive("TestNode", null);
            }
            catch
            {
                bGotManifest = false;
            }
            if (bGotManifest)
            {
                throw new AutomationException("Did not expect shared temp storage manifest to exist");
            }

            // Second one should be fine
            TempStorageManifest NamedManifestFromShared = TempStore.Retreive("TestNode", "NamedOutput");

            CheckManifest(WorkingDir, NamedManifestFromShared, NamedOutput);
        }