1*cc02d7e2SAndroid Build Coastguard Worker #region Copyright notice and license 2*cc02d7e2SAndroid Build Coastguard Worker 3*cc02d7e2SAndroid Build Coastguard Worker // Copyright 2018 gRPC authors. 4*cc02d7e2SAndroid Build Coastguard Worker // 5*cc02d7e2SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 6*cc02d7e2SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 7*cc02d7e2SAndroid Build Coastguard Worker // You may obtain a copy of the License at 8*cc02d7e2SAndroid Build Coastguard Worker // 9*cc02d7e2SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0 10*cc02d7e2SAndroid Build Coastguard Worker // 11*cc02d7e2SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 12*cc02d7e2SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 13*cc02d7e2SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*cc02d7e2SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 15*cc02d7e2SAndroid Build Coastguard Worker // limitations under the License. 16*cc02d7e2SAndroid Build Coastguard Worker 17*cc02d7e2SAndroid Build Coastguard Worker #endregion 18*cc02d7e2SAndroid Build Coastguard Worker 19*cc02d7e2SAndroid Build Coastguard Worker using System.Runtime.InteropServices; // For NETCORE tests. 20*cc02d7e2SAndroid Build Coastguard Worker using Microsoft.Build.Framework; 21*cc02d7e2SAndroid Build Coastguard Worker using Moq; 22*cc02d7e2SAndroid Build Coastguard Worker using NUnit.Framework; 23*cc02d7e2SAndroid Build Coastguard Worker 24*cc02d7e2SAndroid Build Coastguard Worker namespace Grpc.Tools.Tests 25*cc02d7e2SAndroid Build Coastguard Worker { 26*cc02d7e2SAndroid Build Coastguard Worker public class ProtoToolsPlatformTaskTest 27*cc02d7e2SAndroid Build Coastguard Worker { 28*cc02d7e2SAndroid Build Coastguard Worker ProtoToolsPlatform _task; 29*cc02d7e2SAndroid Build Coastguard Worker int _cpuMatched, _osMatched; 30*cc02d7e2SAndroid Build Coastguard Worker 31*cc02d7e2SAndroid Build Coastguard Worker [OneTimeSetUp] SetUp()32*cc02d7e2SAndroid Build Coastguard Worker public void SetUp() 33*cc02d7e2SAndroid Build Coastguard Worker { 34*cc02d7e2SAndroid Build Coastguard Worker var mockEng = new Mock<IBuildEngine>(); 35*cc02d7e2SAndroid Build Coastguard Worker _task = new ProtoToolsPlatform() { BuildEngine = mockEng.Object }; 36*cc02d7e2SAndroid Build Coastguard Worker _task.Execute(); 37*cc02d7e2SAndroid Build Coastguard Worker } 38*cc02d7e2SAndroid Build Coastguard Worker 39*cc02d7e2SAndroid Build Coastguard Worker [OneTimeTearDown] TearDown()40*cc02d7e2SAndroid Build Coastguard Worker public void TearDown() 41*cc02d7e2SAndroid Build Coastguard Worker { 42*cc02d7e2SAndroid Build Coastguard Worker Assert.AreEqual(1, _cpuMatched, "CPU type detection failed"); 43*cc02d7e2SAndroid Build Coastguard Worker Assert.AreEqual(1, _osMatched, "OS detection failed"); 44*cc02d7e2SAndroid Build Coastguard Worker } 45*cc02d7e2SAndroid Build Coastguard Worker 46*cc02d7e2SAndroid Build Coastguard Worker #if NETCORE 47*cc02d7e2SAndroid Build Coastguard Worker // PlatformAttribute not yet available in NUnit, coming soon: 48*cc02d7e2SAndroid Build Coastguard Worker // https://github.com/nunit/nunit/pull/3003. 49*cc02d7e2SAndroid Build Coastguard Worker // Use same test case names as under the full framework. 50*cc02d7e2SAndroid Build Coastguard Worker [Test] CpuIsX86()51*cc02d7e2SAndroid Build Coastguard Worker public void CpuIsX86() 52*cc02d7e2SAndroid Build Coastguard Worker { 53*cc02d7e2SAndroid Build Coastguard Worker if (RuntimeInformation.OSArchitecture == Architecture.X86) 54*cc02d7e2SAndroid Build Coastguard Worker { 55*cc02d7e2SAndroid Build Coastguard Worker _cpuMatched++; 56*cc02d7e2SAndroid Build Coastguard Worker Assert.AreEqual("x86", _task.Cpu); 57*cc02d7e2SAndroid Build Coastguard Worker } 58*cc02d7e2SAndroid Build Coastguard Worker } 59*cc02d7e2SAndroid Build Coastguard Worker 60*cc02d7e2SAndroid Build Coastguard Worker [Test] CpuIsX64()61*cc02d7e2SAndroid Build Coastguard Worker public void CpuIsX64() 62*cc02d7e2SAndroid Build Coastguard Worker { 63*cc02d7e2SAndroid Build Coastguard Worker if (RuntimeInformation.OSArchitecture == Architecture.X64) 64*cc02d7e2SAndroid Build Coastguard Worker { 65*cc02d7e2SAndroid Build Coastguard Worker _cpuMatched++; 66*cc02d7e2SAndroid Build Coastguard Worker Assert.AreEqual("x64", _task.Cpu); 67*cc02d7e2SAndroid Build Coastguard Worker } 68*cc02d7e2SAndroid Build Coastguard Worker } 69*cc02d7e2SAndroid Build Coastguard Worker 70*cc02d7e2SAndroid Build Coastguard Worker [Test] CpuIsArm64()71*cc02d7e2SAndroid Build Coastguard Worker public void CpuIsArm64() 72*cc02d7e2SAndroid Build Coastguard Worker { 73*cc02d7e2SAndroid Build Coastguard Worker if (RuntimeInformation.OSArchitecture == Architecture.Arm64) 74*cc02d7e2SAndroid Build Coastguard Worker { 75*cc02d7e2SAndroid Build Coastguard Worker _cpuMatched++; 76*cc02d7e2SAndroid Build Coastguard Worker 77*cc02d7e2SAndroid Build Coastguard Worker // On macosx arm64, x64 is used until a native protoc is shipped 78*cc02d7e2SAndroid Build Coastguard Worker if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) 79*cc02d7e2SAndroid Build Coastguard Worker { 80*cc02d7e2SAndroid Build Coastguard Worker Assert.AreEqual("x64", _task.Cpu); 81*cc02d7e2SAndroid Build Coastguard Worker } 82*cc02d7e2SAndroid Build Coastguard Worker // On windows arm64, x86 is used until a native protoc is shipped 83*cc02d7e2SAndroid Build Coastguard Worker else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) 84*cc02d7e2SAndroid Build Coastguard Worker { 85*cc02d7e2SAndroid Build Coastguard Worker Assert.AreEqual("x86", _task.Cpu); 86*cc02d7e2SAndroid Build Coastguard Worker } 87*cc02d7e2SAndroid Build Coastguard Worker else 88*cc02d7e2SAndroid Build Coastguard Worker { 89*cc02d7e2SAndroid Build Coastguard Worker Assert.AreEqual("arm64", _task.Cpu); 90*cc02d7e2SAndroid Build Coastguard Worker } 91*cc02d7e2SAndroid Build Coastguard Worker } 92*cc02d7e2SAndroid Build Coastguard Worker } 93*cc02d7e2SAndroid Build Coastguard Worker 94*cc02d7e2SAndroid Build Coastguard Worker [Test] OsIsWindows()95*cc02d7e2SAndroid Build Coastguard Worker public void OsIsWindows() 96*cc02d7e2SAndroid Build Coastguard Worker { 97*cc02d7e2SAndroid Build Coastguard Worker if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) 98*cc02d7e2SAndroid Build Coastguard Worker { 99*cc02d7e2SAndroid Build Coastguard Worker _osMatched++; 100*cc02d7e2SAndroid Build Coastguard Worker Assert.AreEqual("windows", _task.Os); 101*cc02d7e2SAndroid Build Coastguard Worker } 102*cc02d7e2SAndroid Build Coastguard Worker } 103*cc02d7e2SAndroid Build Coastguard Worker 104*cc02d7e2SAndroid Build Coastguard Worker [Test] OsIsLinux()105*cc02d7e2SAndroid Build Coastguard Worker public void OsIsLinux() 106*cc02d7e2SAndroid Build Coastguard Worker { 107*cc02d7e2SAndroid Build Coastguard Worker if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) 108*cc02d7e2SAndroid Build Coastguard Worker { 109*cc02d7e2SAndroid Build Coastguard Worker _osMatched++; 110*cc02d7e2SAndroid Build Coastguard Worker Assert.AreEqual("linux", _task.Os); 111*cc02d7e2SAndroid Build Coastguard Worker } 112*cc02d7e2SAndroid Build Coastguard Worker } 113*cc02d7e2SAndroid Build Coastguard Worker 114*cc02d7e2SAndroid Build Coastguard Worker [Test] OsIsMacOsX()115*cc02d7e2SAndroid Build Coastguard Worker public void OsIsMacOsX() 116*cc02d7e2SAndroid Build Coastguard Worker { 117*cc02d7e2SAndroid Build Coastguard Worker if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) 118*cc02d7e2SAndroid Build Coastguard Worker { 119*cc02d7e2SAndroid Build Coastguard Worker _osMatched++; 120*cc02d7e2SAndroid Build Coastguard Worker Assert.AreEqual("macosx", _task.Os); 121*cc02d7e2SAndroid Build Coastguard Worker } 122*cc02d7e2SAndroid Build Coastguard Worker } 123*cc02d7e2SAndroid Build Coastguard Worker 124*cc02d7e2SAndroid Build Coastguard Worker #else // !NETCORE, i.e. full framework. 125*cc02d7e2SAndroid Build Coastguard Worker 126*cc02d7e2SAndroid Build Coastguard Worker [Test, Platform("32-Bit")] CpuIsX86()127*cc02d7e2SAndroid Build Coastguard Worker public void CpuIsX86() 128*cc02d7e2SAndroid Build Coastguard Worker { 129*cc02d7e2SAndroid Build Coastguard Worker _cpuMatched++; 130*cc02d7e2SAndroid Build Coastguard Worker Assert.AreEqual("x86", _task.Cpu); 131*cc02d7e2SAndroid Build Coastguard Worker } 132*cc02d7e2SAndroid Build Coastguard Worker 133*cc02d7e2SAndroid Build Coastguard Worker [Test, Platform("64-Bit")] CpuIsX64()134*cc02d7e2SAndroid Build Coastguard Worker public void CpuIsX64() 135*cc02d7e2SAndroid Build Coastguard Worker { 136*cc02d7e2SAndroid Build Coastguard Worker _cpuMatched++; 137*cc02d7e2SAndroid Build Coastguard Worker Assert.AreEqual("x64", _task.Cpu); 138*cc02d7e2SAndroid Build Coastguard Worker } 139*cc02d7e2SAndroid Build Coastguard Worker 140*cc02d7e2SAndroid Build Coastguard Worker [Test, Platform("Win")] OsIsWindows()141*cc02d7e2SAndroid Build Coastguard Worker public void OsIsWindows() 142*cc02d7e2SAndroid Build Coastguard Worker { 143*cc02d7e2SAndroid Build Coastguard Worker _osMatched++; 144*cc02d7e2SAndroid Build Coastguard Worker Assert.AreEqual("windows", _task.Os); 145*cc02d7e2SAndroid Build Coastguard Worker } 146*cc02d7e2SAndroid Build Coastguard Worker 147*cc02d7e2SAndroid Build Coastguard Worker [Test, Platform("Linux")] OsIsLinux()148*cc02d7e2SAndroid Build Coastguard Worker public void OsIsLinux() 149*cc02d7e2SAndroid Build Coastguard Worker { 150*cc02d7e2SAndroid Build Coastguard Worker _osMatched++; 151*cc02d7e2SAndroid Build Coastguard Worker Assert.AreEqual("linux", _task.Os); 152*cc02d7e2SAndroid Build Coastguard Worker } 153*cc02d7e2SAndroid Build Coastguard Worker 154*cc02d7e2SAndroid Build Coastguard Worker [Test, Platform("MacOSX")] OsIsMacOsX()155*cc02d7e2SAndroid Build Coastguard Worker public void OsIsMacOsX() 156*cc02d7e2SAndroid Build Coastguard Worker { 157*cc02d7e2SAndroid Build Coastguard Worker _osMatched++; 158*cc02d7e2SAndroid Build Coastguard Worker Assert.AreEqual("macosx", _task.Os); 159*cc02d7e2SAndroid Build Coastguard Worker } 160*cc02d7e2SAndroid Build Coastguard Worker 161*cc02d7e2SAndroid Build Coastguard Worker #endif // NETCORE 162*cc02d7e2SAndroid Build Coastguard Worker }; 163*cc02d7e2SAndroid Build Coastguard Worker } 164