public void CreateStatusFileTest() { FileHelper.FileSystem = new MockFileSystem(new Dictionary<string, MockFileData>()); StatusFile statusFile = new StatusFile("site1"); string statusFilePath = @"c:\site1\status.xml"; Assert.IsFalse(FileHelper.FileSystem.File.Exists(statusFilePath)); statusFile.LoadOrCreate(); Assert.IsTrue(FileHelper.FileSystem.File.Exists(statusFilePath)); }
public void LoadStatusFileTest() { StatusFile statusFile = null; string profileName = "site"; List<string> tests = new List<string>() { "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<status>" + "</status>", "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<status>" + " <state>failed</state>" + " <startTime>3/17/2014</startTime>" + " <endTime>3/18/2014</endTime>" + " <complete>true</complete>" + " <objectsAdded>100</objectsAdded>" + " <objectsUpdated>1000</objectsUpdated>" + " <objectsDeleted>10000</objectsDeleted>" + " <parametersChanged>100000</parametersChanged>" + " <bytesCopied>1000000</bytesCopied>" + "</status>", "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<status>" + " <state>InvalidState</state>" + " <startTime>InvalidTime</startTime>" + " <endTime>InvalidTime</endTime>" + " <complete>NotBool</complete>" + " <objectsAdded>NotNum</objectsAdded>" + " <objectsUpdated>NotNum</objectsUpdated>" + " <objectsDeleted>NotNum</objectsDeleted>" + " <parametersChanged>NotNum</parametersChanged>" + " <bytesCopied>NotNum</bytesCopied>" + "</status>", }; var expected = new[]{ new StatusFileTestData(), new StatusFileTestData(){ State = DeployState.Failed, StartTime = DateTime.Parse("3/17/2014"), EndTime = DateTime.Parse("3/18/2014"), Complete = true, ObjectsAdded = 100, ObjectsUpdated = 1000, ObjectsDeleted = 10000, ParametersChanged = 100000, BytesCopied = 1000000 }, new StatusFileTestData() }; for (int i = 0; i < tests.Count; i++) { FileHelper.FileSystem = new MockFileSystem(new Dictionary<string, MockFileData>() { { @"c:\site\status.xml", new MockFileData(tests[i]) } }); statusFile = new StatusFile(profileName); statusFile.LoadOrCreate(); VerifyStatusFile(expected[i], statusFile); } }
public void SaveStatusFileTest() { string profileName = "site"; DateTime startTime = DateTime.Now; DateTime endTime = DateTime.Now.AddHours(1); StatusFileTestData[] tests = new StatusFileTestData[] { new StatusFileTestData(){ State = DeployState.Succeeded, ObjectsAdded = 10, ObjectsUpdated = 20, ObjectsDeleted = 30, ParametersChanged = 40, BytesCopied = 50, StartTime = DateTime.UtcNow, EndTime = DateTime.UtcNow.AddHours(1), Complete = true } }; System.IO.Abstractions.FileBase MockFile = FileHelper.FileSystem.File; for (int i = 0; i < tests.Length; i++) { StatusFile statusFile = new StatusFile(profileName); statusFile.State = tests[i].State; statusFile.ObjectsAdded = tests[i].ObjectsAdded; statusFile.ObjectsUpdated = tests[i].ObjectsUpdated; statusFile.ObjectsDeleted = tests[i].ObjectsDeleted; statusFile.ParametersChanged = tests[i].ParametersChanged; statusFile.BytesCopied = tests[i].BytesCopied; statusFile.StartTime = tests[i].StartTime; statusFile.EndTime = tests[i].EndTime; statusFile.Complete = tests[i].Complete; statusFile.Save(); Assert.IsTrue(MockFile.Exists(@"c:\" + profileName + @"\status.xml")); statusFile = new StatusFile(profileName); statusFile.LoadOrCreate(); VerifyStatusFile(tests[i], statusFile); } }
private void VerifyStatusFile(StatusFileTestData expected, StatusFile result) { Assert.AreEqual(expected.BytesCopied, result.BytesCopied, "bytes copied"); Assert.AreEqual(expected.Complete, result.Complete, "complete"); VerifyDateTime(expected.EndTime, result.EndTime); VerifyDateTime(expected.StartTime, result.StartTime); Assert.AreEqual(expected.ObjectsAdded, result.ObjectsAdded, "objects added"); Assert.AreEqual(expected.ObjectsDeleted, result.ObjectsDeleted, "objects deleted"); Assert.AreEqual(expected.ObjectsUpdated, result.ObjectsUpdated, "objects updated"); Assert.AreEqual(expected.ParametersChanged, result.ParametersChanged, "parameters changed"); Assert.AreEqual(expected.State, result.State, "state"); }
public DeploymentChangeSummary DeployContentToOneSite( IConfigRepository repository, string contentPath, string publishSettingsFile) { var sourceBaseOptions = new DeploymentBaseOptions(); DeploymentBaseOptions destBaseOptions; string siteName = SetDestBaseOptions(publishSettingsFile, out destBaseOptions); bool success = true; DeploymentChangeSummary summary = null; AddSkips(repository.Config.SkipRules, sourceBaseOptions, destBaseOptions); Trace.TraceInformation("Starting WebDeploy for {0}", Path.GetFileName(publishSettingsFile)); using (StatusFile status = new StatusFile(siteName)) using (LogFile logFile = new LogFile(siteName, false)) { sourceBaseOptions.Trace += logFile.LogEventHandler; destBaseOptions.Trace += logFile.LogEventHandler; try { logFile.Log(TraceLevel.Info, "Beginning sync"); status.State = Models.DeployState.Deploying; status.Save(); // Publish the content to the remote site using (var deploymentObject = DeploymentManager.CreateObject(DeploymentWellKnownProvider.ContentPath, contentPath, sourceBaseOptions)) { // Note: would be nice to have an async flavor of this API... summary = deploymentObject.SyncTo(DeploymentWellKnownProvider.ContentPath, siteName, destBaseOptions, new DeploymentSyncOptions()); } string summaryString = string.Format("Total Changes: {0} ({1} added, {2} deleted, {3} updated, {4} parameters changed, {5} bytes copied)", summary.TotalChanges, summary.ObjectsAdded, summary.ObjectsDeleted, summary.ObjectsUpdated, summary.ParameterChanges, summary.BytesCopied); status.ObjectsAdded = summary.ObjectsAdded; status.ObjectsDeleted = summary.ObjectsDeleted; status.ObjectsUpdated = summary.ObjectsUpdated; status.ParametersChanged = summary.ParameterChanges; status.BytesCopied = summary.BytesCopied; logFile.Log(TraceLevel.Info, summaryString); logFile.Log(TraceLevel.Info, "Sync completed successfully"); } catch(Exception e) { logFile.Log(TraceLevel.Error, e.ToString()); success = false; status.State = Models.DeployState.Failed; } if (success) { status.State = Models.DeployState.Succeeded; } } // Close log file and status file return summary; }