Skip to content

Commit cda63fc

Browse files
committed
Merge pull request #8 from csMACnz/release-0.10.0
Merge Release 0.10.0 to Master
2 parents 25452f9 + 300fcb8 commit cda63fc

27 files changed

+569
-143
lines changed

Build.environment.ps1

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
choco install psake
2-
choco install pscx
3-
choco install GitVersion.Portable
4-
choco install nuget.CommandLine
1+
choco install -y psake
2+
choco install -y pscx
3+
choco install -y GitVersion.Portable
4+
choco install -y nuget.CommandLine
55

66
$pscxPath = "C:\Program Files (x86)\PowerShell Community Extensions\Pscx3\Pscx";
77

CodeCoverage.runsettings

+4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
<Include>
1212
<ModulePath>.*CoverityPublisher.*</ModulePath>
1313
</Include>
14+
<Exclude>
15+
<ModulePath>.*xunit.core.dll</ModulePath>
16+
<ModulePath>.*docoptnet.dll</ModulePath>
17+
</Exclude>
1418
</ModulePaths>
1519

1620
</CodeCoverage>

appveyor.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ environment:
99
secure: QDrEvPQa9oEzLz7MU477Y4VDEj0NWGv5w08hr+Jv3kxZSUiStqF96yeofnuR1WkC
1010
install:
1111
- ps: .\build.environment.ps1
12-
- ps: GitVersion /output buildserver /updateassemblyinfo true /assemblyVersionFormat Major
12+
- ps: psake .\build.tasks.ps1 appveyor-install
1313
build_script:
1414
- ps: psake .\build.tasks.ps1 appveyor-build
1515
test_script:

build.tasks.ps1

+35-11
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,31 @@ properties {
2424

2525
task default
2626

27-
task RestoreNuGetPackages {
28-
exec { nuget.exe restore $sln_file }
27+
task SetChocolateyPath {
28+
$script:chocolateyDir = $null
29+
if ($env:ChocolateyInstall -ne $null) {
30+
$script:chocolateyDir = $env:ChocolateyInstall;
31+
} elseif (Test-Path (Join-Path $env:SYSTEMDRIVE Chocolatey)) {
32+
$script:chocolateyDir = Join-Path $env:SYSTEMDRIVE Chocolatey;
33+
} elseif (Test-Path (Join-Path ([Environment]::GetFolderPath("CommonApplicationData")) Chocolatey)) {
34+
$script:chocolateyDir = Join-Path ([Environment]::GetFolderPath("CommonApplicationData")) Chocolatey;
35+
}
36+
37+
Write-Output "Chocolatey installed at $script:chocolateyDir";
2938
}
3039

31-
task GitVersion {
32-
GitVersion /output buildserver /updateassemblyinfo true /assemblyVersionFormat Major
40+
task RestoreNuGetPackages -depends SetChocolateyPath {
41+
$chocolateyBinDir = Join-Path $script:chocolateyDir -ChildPath "bin";
42+
$NuGetExe = Join-Path $chocolateyBinDir -ChildPath "NuGet.exe";
43+
44+
exec { & $NuGetExe restore $sln_file }
45+
}
46+
47+
task GitVersion -depends SetChocolateyPath {
48+
$chocolateyBinDir = Join-Path $script:chocolateyDir -ChildPath "bin";
49+
$gitVersionExe = Join-Path $chocolateyBinDir -ChildPath "GitVersion.exe";
50+
51+
& $gitVersionExe /output buildserver /updateassemblyinfo true /assemblyVersionFormat Major
3352
}
3453

3554
task AppVeyorEnvironmentSettings {
@@ -76,7 +95,7 @@ task build {
7695
task setup-coverity-local {
7796
$env:APPVEYOR_BUILD_FOLDER = "."
7897
$env:APPVEYOR_BUILD_VERSION = $script:version
79-
$env:APPVEYOR_REPO_NAME = "csmacnz/coveritypublisher"
98+
$env:APPVEYOR_REPO_NAME = "csMACnz/coveritypublisher"
8099
"You should have set the COVERITY_TOKEN and COVERITY_EMAIL environment variables already"
81100
$env:APPVEYOR_SCHEDULED_BUILD = "True"
82101
}
@@ -89,9 +108,11 @@ task coverity -precondition { return $env:APPVEYOR_SCHEDULED_BUILD -eq "True" }
89108

90109
$coverityFileName = "$applicationName.coverity.$script:nugetVersion.zip"
91110

92-
.\src\csmacnz.CoverityPublisher\bin\Release\PublishCoverity compress -o $coverityFileName
111+
$coverity = "$build_output_dir\PublishCoverity"
112+
113+
& $coverity compress -o $coverityFileName
93114

94-
.\src\csmacnz.CoverityPublisher\bin\Release\PublishCoverity publish -t $env:COVERITY_TOKEN -e $env:COVERITY_EMAIL -z $coverityFileName -d "AppVeyor scheduled build ($env:APPVEYOR_BUILD_VERSION)." --codeVersion $script:nugetVersion
115+
& $coverity publish -t $env:COVERITY_TOKEN -e $env:COVERITY_EMAIL -z $coverityFileName -d "AppVeyor scheduled build ($env:APPVEYOR_BUILD_VERSION)." --codeVersion $script:nugetVersion
95116
}
96117

97118
task ResolveCoverallsPath {
@@ -101,7 +122,7 @@ task ResolveCoverallsPath {
101122
task coverage -depends build, coverage-only
102123

103124
task coverage-only {
104-
vstest.console.exe /inIsolation /Enablecodecoverage /Settings:CodeCoverage.runsettings /TestAdapterPath:".\src\packages\xunit.runner.visualstudio.2.0.0-rc3-build1046\build\_common\" .\src\csmacnz.CoverityPublisher.Unit.Tests\bin\Release\csmacnz.CoverityPublisher.Unit.Tests.dll .\src\csmacnz.CoverityPublisher.Integration.Tests\bin\Release\csmacnz.CoverityPublisher.Integration.Tests.dll
125+
vstest.console.exe /inIsolation /Enablecodecoverage /Settings:CodeCoverage.runsettings /TestAdapterPath:".\src\packages\xunit.runner.visualstudio.2.0.0-rc3-build1046\build\_common\" ".\src\csmacnz.CoverityPublisher.Unit.Tests\bin\$configuration\csmacnz.CoverityPublisher.Unit.Tests.dll" ".\src\csmacnz.CoverityPublisher.Integration.Tests\bin\$configuration\csmacnz.CoverityPublisher.Integration.Tests.dll"
105126
$coverageFilePath = Resolve-Path -path "TestResults\*\*.coverage"
106127

107128
$coverageFilePath = $coverageFilePath.ToString()
@@ -133,7 +154,7 @@ task archive-only {
133154

134155
task pack -depends build, pack-only
135156

136-
task pack-only {
157+
task pack-only -depends SetChocolateyPath {
137158

138159
mkdir $nuget_pack_dir
139160
cp "$nuspec_filename" "$nuget_pack_dir"
@@ -144,13 +165,16 @@ task pack-only {
144165
$Spec.package.metadata.version = ([string]$Spec.package.metadata.version).Replace("{Version}", $script:nugetVersion)
145166
$Spec.Save("$nuget_pack_dir\$nuspec_filename")
146167

147-
exec { nuget pack "$nuget_pack_dir\$nuspec_filename" }
168+
$chocolateyBinDir = Join-Path $script:chocolateyDir -ChildPath "bin";
169+
$NuGetExe = Join-Path $chocolateyBinDir -ChildPath "NuGet.exe";
170+
171+
exec { & $NuGetExe pack "$nuget_pack_dir\$nuspec_filename" }
148172
}
149173

150174
task postbuild -depends pack, archive, coverage-only, coveralls
151175

152176
task appveyor-install -depends GitVersion, RestoreNuGetPackages
153177

154-
task appveyor-build -depends RestoreNuGetPackages, build
178+
task appveyor-build -depends build
155179

156180
task appveyor-test -depends AppVeyorEnvironmentSettings, postbuild, coverity
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
namespace csmacnz.CoverityPublisher.Integration.Tests
2+
{
3+
public class BuildMetrics
4+
{
5+
public static string GetValidContents()
6+
{
7+
return BuildContents(failuresCount:0, successesCount:1);
8+
}
9+
public static string GetContentsWithFailures()
10+
{
11+
return BuildContents(failuresCount: 2, successesCount: 1);
12+
}
13+
14+
private static string BuildContents(int failuresCount, int successesCount)
15+
{
16+
return string.Format(@"<?xml version=""1.0"" encoding=""UTF-8""?>
17+
<!DOCTYPE coverity SYSTEM ""config.dtd"">
18+
<coverity>
19+
20+
<metrics>
21+
<metric>
22+
<name>time</name>
23+
<value>39</value>
24+
</metric>
25+
<metric>
26+
<name>args</name>
27+
<value>C:\tools\cov-analysis-win64-7.6.0\bin\cov-build.exe --dir cov-int</value>
28+
</metric>
29+
<metric>
30+
<name>host</name>
31+
<value>MyMachine</value>
32+
</metric>
33+
<metric>
34+
<name>short-platform</name>
35+
<value>win64</value>
36+
</metric>
37+
<metric>
38+
<name>platform</name>
39+
<value>Windows 8 (Unknown Edition number 101), 64-bit (build 9200)</value>
40+
</metric>
41+
<metric>
42+
<name>ident</name>
43+
<value>7.6.0 (build 9b77a50df0 p-harmony-push-21098.563)</value>
44+
</metric>
45+
<metric>
46+
<name>user</name>
47+
<value>MyUser</value>
48+
</metric>
49+
<metric>
50+
<name>cwd</name>
51+
<value>C:\Dev\Project</value>
52+
</metric>
53+
<metric>
54+
<name>config</name>
55+
<value>C:\tools\cov-analysis-win64-7.6.0\config\coverity_config.xml</value>
56+
</metric>
57+
<metric>
58+
<name>intermediatedir</name>
59+
<value>c:\Dev\Project\cov-int</value>
60+
</metric>
61+
<metric>
62+
<name>outputdir</name>
63+
<value>c:\Dev\Project\cov-int\output</value>
64+
</metric>
65+
<metric>
66+
<name>emitdir</name>
67+
<value>c:\Dev\Project\cov-int\emit</value>
68+
</metric>
69+
<metric>
70+
<name>force</name>
71+
<value>no</value>
72+
</metric>
73+
<metric>
74+
<name>cygwin</name>
75+
<value>no</value>
76+
</metric>
77+
<metric>
78+
<name>failures</name>
79+
<value>{0}</value>
80+
</metric>
81+
<metric>
82+
<name>successes</name>
83+
<value>{1}</value>
84+
</metric>
85+
<metric>
86+
<name>uptodate</name>
87+
<value>0</value>
88+
</metric>
89+
<metric>
90+
<name>buildcmd</name>
91+
<value>msbuild.exe /t:Clean;Build /p:Configuration=Release C:\Dev\Project\src\MySolution.sln</value>
92+
</metric>
93+
</metrics>
94+
</coverity>", failuresCount, successesCount);
95+
}
96+
97+
public static string FileName { get { return "BUILD.metrics.xml"; } }
98+
}
99+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
using System.IO;
2+
using csmacnz.CoverityPublisher.Integration.Tests.TestFramework;
3+
using Xunit;
4+
5+
namespace csmacnz.CoverityPublisher.Integration.Tests
6+
{
7+
public class CompressTests
8+
{
9+
[Fact]
10+
public void ValidInputSuccessful()
11+
{
12+
var compressionFolder = CreateValidCompressionFolder();
13+
var fileNameToCreate = TestFolders.DefineTempFile("FileNameToCreate.zip");
14+
var results = RunExe(fileNameToCreate, compressionFolder);
15+
16+
Assert.Equal(0, results.ExitCode);
17+
Assert.True(File.Exists(fileNameToCreate));
18+
}
19+
20+
[Fact]
21+
public void ValidInputDryRunSuccessfulWithoutFile()
22+
{
23+
var compressionFolder = CreateValidCompressionFolder();
24+
var fileNameToCreate = TestFolders.DefineTempFile("FileNameToCreate.zip");
25+
var results = DryRunExe(fileNameToCreate, compressionFolder);
26+
27+
Assert.Equal(0, results.ExitCode);
28+
Assert.False(File.Exists(fileNameToCreate));
29+
}
30+
31+
[Fact]
32+
public void FolderDoesntExistErrors()
33+
{
34+
var fileNameToCreate = TestFolders.DefineTempFile("FileNameToCreate.zip");
35+
var results = RunExe(fileNameToCreate, "doesntExistFolder");
36+
37+
Assert.NotEqual(0, results.ExitCode);
38+
Assert.Contains("Input folder 'doesntExistFolder' cannot be found.", results.StandardError);
39+
}
40+
41+
[Fact]
42+
public void InputFolderExistsWithoutBuildMetricsErrors()
43+
{
44+
var compressionFolder = TestFolders.CreateTempFolder();
45+
var fileNameToCreate = TestFolders.DefineTempFile("FileNameToCreate.zip");
46+
var results = RunExe(fileNameToCreate, compressionFolder);
47+
48+
Assert.NotEqual(0, results.ExitCode);
49+
Assert.Contains("Input folder '" + compressionFolder + "' is not recognised as Coverity Scan results.", results.StandardError);
50+
}
51+
52+
[Fact]
53+
public void InputFolderExistsWithFailuresWithoutAbortSuccessful()
54+
{
55+
var fileNameToCreate = TestFolders.DefineTempFile("FileNameToCreate.zip");
56+
var compressionFolder = CreateValidCompressionFolderWithFailures();
57+
var results = RunExe(fileNameToCreate, compressionFolder);
58+
59+
Assert.Equal(0, results.ExitCode);
60+
}
61+
62+
[Fact]
63+
public void InputFolderExistsWithFailuresWithAbortOnFailuresErrors()
64+
{
65+
var fileNameToCreate = TestFolders.DefineTempFile("FileNameToCreate.zip");
66+
var compressionFolder = CreateValidCompressionFolderWithFailures();
67+
var results = RunExe(fileNameToCreate, compressionFolder, "--abortOnFailures");
68+
69+
Assert.NotEqual(0, results.ExitCode);
70+
Assert.Contains("Input folder '" + compressionFolder + "' has recorded failures.", results.StandardError);
71+
}
72+
73+
[Fact]
74+
public void InputFolderExistsWithoutFailuresWithAbortOnFailuresSuccessful()
75+
{
76+
var fileNameToCreate = TestFolders.DefineTempFile("FileNameToCreate.zip");
77+
var compressionFolder = CreateValidCompressionFolder();
78+
var results = RunExe(fileNameToCreate, compressionFolder, "--abortOnFailures");
79+
80+
Assert.Equal(0, results.ExitCode);
81+
}
82+
83+
[Fact]
84+
public void FileExistsWithoutOverwriteErrors()
85+
{
86+
var existingZip = TestFolders.CreateTempFile("zip");
87+
var compressionFolder = CreateValidCompressionFolder();
88+
var results = RunExe(existingZip, compressionFolder);
89+
90+
Assert.NotEqual(0, results.ExitCode);
91+
Assert.Contains("Output file '" + existingZip + "' already exists.", results.StandardError);
92+
}
93+
94+
[Fact]
95+
public void FileExistsWithOverwriteErrors()
96+
{
97+
var existingZip = TestFolders.CreateTempFile("zip");
98+
var compressionFolder = CreateValidCompressionFolder();
99+
var results = RunExe(existingZip, compressionFolder, "--overwrite");
100+
101+
Assert.Equal(0, results.ExitCode);
102+
Assert.Contains("Overwritting file '" + existingZip + "' with new compression data.", results.StandardOutput);
103+
Assert.True(File.Exists(existingZip));
104+
}
105+
106+
[Fact]
107+
public void DefaultShowsLogo()
108+
{
109+
var results = ExecuteCompress();
110+
111+
Assert.Equal(0, results.ExitCode);
112+
Assert.Contains(@"| __ \ | | | (_) | | / ____| (_) |", results.StandardOutput);
113+
Assert.Contains(@"| |__) | _| |__ | |_ ___| |__ | | _____ _____ _ __ _| |_ _ _", results.StandardOutput);
114+
Assert.Contains(@"| ___/ | | | '_ \| | / __| '_ \| | / _ \ \ / / _ \ '__| | __| | | |", results.StandardOutput);
115+
Assert.Contains(@"| | | |_| | |_) | | \__ \ | | | |___| (_) \ V / __/ | | | |_| |_| |", results.StandardOutput);
116+
Assert.Contains(@"|_| \__,_|_.__/|_|_|___/_| |_|\_____\___/ \_/ \___|_| |_|\__|\__, |", results.StandardOutput);
117+
}
118+
119+
[Fact]
120+
public void NoLogoSuccess()
121+
{
122+
var results = ExecuteCompress("--nologo");
123+
124+
125+
Assert.Equal(0, results.ExitCode);
126+
Assert.DoesNotContain(@"| __ \ | | | (_) | | / ____| (_) |", results.StandardOutput);
127+
Assert.DoesNotContain(@"| |__) | _| |__ | |_ ___| |__ | | _____ _____ _ __ _| |_ _ _", results.StandardOutput);
128+
Assert.DoesNotContain(@"| ___/ | | | '_ \| | / __| '_ \| | / _ \ \ / / _ \ '__| | __| | | |", results.StandardOutput);
129+
Assert.DoesNotContain(@"| | | |_| | |_) | | \__ \ | | | |___| (_) \ V / __/ | | | |_| |_| |", results.StandardOutput);
130+
Assert.DoesNotContain(@"|_| \__,_|_.__/|_|_|___/_| |_|\_____\___/ \_/ \___|_| |_|\__|\__, |", results.StandardOutput);
131+
}
132+
133+
private static string CreateValidCompressionFolder()
134+
{
135+
var compressionFolder = TestFolders.CreateTempFolder();
136+
var metricsFile = Path.Combine(compressionFolder, BuildMetrics.FileName);
137+
File.WriteAllText(metricsFile, BuildMetrics.GetValidContents());
138+
return compressionFolder;
139+
}
140+
141+
private static string CreateValidCompressionFolderWithFailures()
142+
{
143+
var compressionFolder = CreateValidCompressionFolder();
144+
File.WriteAllText(Path.Combine(compressionFolder, BuildMetrics.FileName), BuildMetrics.GetContentsWithFailures());
145+
return compressionFolder;
146+
}
147+
148+
private RunResults ExecuteCompress(string options = "")
149+
{
150+
var compressionFolder = CreateValidCompressionFolder();
151+
var fileNameToCreate = TestFolders.DefineTempFile("FileNameToCreate.zip");
152+
var results = DryRunExe(fileNameToCreate, compressionFolder, options);
153+
return results;
154+
}
155+
156+
private static RunResults RunExe(string output, string input, string options = "")
157+
{
158+
return ExeTestRunner.RunExe(string.Format("compress -o {0} -i {1} {2}", output, input, options));
159+
}
160+
161+
private static RunResults DryRunExe(string output, string input, string options = "")
162+
{
163+
return ExeTestRunner.RunExe(string.Format("compress -o {0} -i {1} --dryrun {2}", output, input, options));
164+
}
165+
}
166+
}

0 commit comments

Comments
 (0)