xenadmin/XenAdminTests/ArchiveTests/ArchiveIteratorTests.cs
Alexander Schulz 2d1f47c321 Integrade changes from master-7.4 into master (https://github.com/xcp-ng/xenadmin/issues/68)
proper fix: use Path to TestDirectory

https://github.com/nunit/docs/wiki/Breaking-Changes

CurrentDirectory:
No longer set to the directory containing the test assembly. Use TestContext.CurrentContext.TestDirectory to locate that directory.
fix Test CertificateDialogTests

Path to the Cert was build as:
 xenadmin\TestResources\TestDevCertificate.cer

but should be:
 xenadmin\XenAdminTests\TestResources\TestDevCertificate.cer
fix Test TestFailingReaderGeneration

Ionic.BZip2 is throwing an IOException:
System.IO.IOException: 'Not a valid BZip2 stream. byte 0, expected '66', got '-1''
use update.xml in master brach on github (as a first solution)

https://github.com/xcp-ng/xenadmin/issues/29

Do not check for ContainerCapability on XCP-ng, just belive in it :-)

If server is in not licenced, don't show alert icon

Changed SetUp to OneTimeSetup in SetUpFixture

https://github.com/xcp-ng/xenadmin/issues/24

abort, if BUILD_NUMBER environment variable is not set

build automation

Ignore ".vs" folder
splash buildable with Visual Studio Community 2018

https://github.com/xcp-ng/xenadmin/issues/24 Get Tests running

https://github.com/xcp-ng/xenadmin/issues/24 Get Tests running

real world: edition "platinum" has changed to "desktop-plus"

https://github.com/xcp-ng/xenadmin/issues/24 Get Tests running

set culture to "en-EN" to ensure correct parsing

https://github.com/xcp-ng/xenadmin/issues/24 Get Tests running

correct adaption to nunit 3

adapt to nunit 3

adapt path

real world: edition "platinum" has changed to "desktop-plus"

Use Nunit and Moq from NuGet; Adapt tests to Nunit 3

https://github.com/xcp-ng/xenadmin/issues/24 Get Tests running

Fill AssemblyFileVersion

Idea from https://github.com/xcp-ng/xenadmin/issues/17 Show Version in Title

Tidy up Branding/Trademarks/License

https://github.com/xcp-ng/xenadmin/issues/18

Comment unreachable code to be buildable (https://github.com/xcp-ng/xenadmin/issues/14#issuecomment-380041068)

XCP-ng Console should connect to any flavor of XenServer

(cherry picked from commit 7e2342534d75193685139226fcaf89bb365fc706)
2019-02-09 00:43:14 +01:00

236 lines
8.1 KiB
C#

/* Copyright (c) Citrix Systems, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms,
* with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above
* copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
using System;
using System.IO;
using System.Text;
using NUnit.Framework;
using XenCenterLib.Archive;
namespace XenAdminTests.ArchiveTests
{
[TestFixture, Category(TestCategories.UICategoryA)]
class ArchiveIteratorTests
{
private ArchiveIteratorFake fakeIterator;
#region ArchiveIterator Fake
private class ArchiveIteratorFake : ArchiveIterator
{
private int numberOfCallsLeft;
private Stream extractedFile;
private string currentFileName;
private long currentFileSize;
private DateTime modTime;
private bool isDirectory;
private bool disposed;
public int NumberOfCallsLeftReturn
{
set { numberOfCallsLeft = value; }
}
public Stream ExtractedFileReturn
{
set
{
extractedFile = value;
disposed = false;
}
}
public string CurrentFileNameReturn
{
set { currentFileName = value; }
}
public long CurrentFileSizeReturn
{
set { currentFileSize = value; }
}
public DateTime ModTimeReturn
{
set { modTime = value; }
}
public bool IsDirectoryReturn
{
set { isDirectory = value; }
}
public ArchiveIteratorFake()
{
Reset();
}
public void Reset()
{
CurrentFileNameReturn = "TestFileName.fake";
CurrentFileSizeReturn = 100;
ExtractedFileReturn = new MemoryStream(Encoding.ASCII.GetBytes("This is a test"));
IsDirectoryReturn = false;
ModTimeReturn = new DateTime(2011, 4, 1, 11, 04, 01);
NumberOfCallsLeftReturn = 1;
}
public override bool HasNext()
{
if (numberOfCallsLeft < 1)
return false;
numberOfCallsLeft--;
return true;
}
public override void ExtractCurrentFile(Stream extractedFileContents)
{
byte[] buffer = new byte[2 * 1024 * 1024];
int read;
while ((read = extractedFile.Read(buffer, 0, buffer.Length)) > 0)
{
extractedFileContents.Write(buffer, 0, read);
}
extractedFile.Position = 0;
}
public override string CurrentFileName()
{
if (String.IsNullOrEmpty(currentFileName))
return currentFileName;
return numberOfCallsLeft + currentFileName;
}
public override long CurrentFileSize()
{
return currentFileSize;
}
public override DateTime CurrentFileModificationTime()
{
return modTime;
}
public override bool IsDirectory()
{
return isDirectory;
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if( !disposed )
{
if( disposing )
{
if(extractedFile != null)
extractedFile.Dispose();
}
}
}
}
#endregion
[OneTimeSetUp]
public void Setup()
{
fakeIterator = new ArchiveIteratorFake();
}
[OneTimeTearDown]
public void TearDown()
{
fakeIterator.Dispose();
}
[SetUp]
public void TestSetup()
{
fakeIterator.Reset();
}
[Test]
public void AnExceptionIsThrownForNullArgumentWhenCallingExtractAllContents()
{
Assert.That(() => fakeIterator.ExtractAllContents(null), Throws.ArgumentNullException);
}
[Test]
public void AnExceptionIsThrownForANullFileNameWhenCallingExtractAllContents()
{
fakeIterator.CurrentFileNameReturn = null;
Assert.That(() => fakeIterator.ExtractAllContents(Path.GetTempPath()), Throws.ArgumentNullException);
}
[Test]
public void VerifyAFileIsWrittenWhenCallingExtractAllContents()
{
string tempPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
const int numberOfFiles = 3;
fakeIterator.NumberOfCallsLeftReturn = numberOfFiles;
fakeIterator.ExtractAllContents(tempPath);
//Test file has been created
string targetFile = Path.Combine(tempPath, fakeIterator.CurrentFileName());
Assert.IsTrue(File.Exists(targetFile), "File Exists");
Assert.IsTrue(File.ReadAllBytes(targetFile).Length > 1, "File length > 1");
//Check recursively that there are only the correct number of files
Assert.IsTrue(Directory.GetFiles(tempPath, "*.*", SearchOption.AllDirectories).Length == numberOfFiles, "File number is correct");
Assert.IsFalse((File.GetAttributes(targetFile) & FileAttributes.Directory) == FileAttributes.Directory, "Is not a dir");
Directory.Delete(tempPath,true);
}
[Test]
public void VerifyADirectoryIsWrittenWhenCallingExtractAllContents()
{
string tempPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
fakeIterator.IsDirectoryReturn = true;
fakeIterator.CurrentFileNameReturn = "FakePath" + Path.DirectorySeparatorChar;
fakeIterator.ExtractAllContents(tempPath);
//Test file has been created
string targetPath = Path.Combine(tempPath, fakeIterator.CurrentFileName());
Assert.IsFalse(File.Exists(targetPath), "No files exist");
Assert.IsTrue(Directory.Exists(targetPath), "Directories exist");
//No files - just a directory
Assert.IsTrue(Directory.GetFiles(tempPath).Length < 1, "No file in the directory" );
//Check it's a directory
Assert.IsTrue((File.GetAttributes(targetPath) & FileAttributes.Directory) == FileAttributes.Directory, "Has directory attributes");
Directory.Delete(tempPath, true);
}
}
}