static MonoValidationTestParameters CreateParameters(ValidationTestCategory category, MonoValidationTestType type, params object[] args)
        {
            var sb = new StringBuilder();

            sb.Append(type);
            foreach (var arg in args)
            {
                sb.AppendFormat(":{0}", arg);
            }
            var name = sb.ToString();

            return(new MonoValidationTestParameters(category, type, name));
        }
 public static IEnumerable <MonoValidationTestParameters> GetParameters(TestContext ctx, ValidationTestCategory category)
 {
     return(GetTestTypes(ctx, category).Select(t => Create(ctx, category, t)));
 }
        public static IEnumerable <MonoValidationTestType> GetTestTypes(TestContext ctx, ValidationTestCategory category)
        {
            switch (category)
            {
            case ValidationTestCategory.Default:
                yield return(MonoValidationTestType.NoHost);

                yield return(MonoValidationTestType.EmptyHost);

                yield return(MonoValidationTestType.WrongHost);

                yield return(MonoValidationTestType.Success);

                yield return(MonoValidationTestType.RejectSelfSigned);

                yield return(MonoValidationTestType.RejectHamillerTube);

                yield return(MonoValidationTestType.TestRunnerCallback);

                yield break;

            case ValidationTestCategory.AppleTls:
                yield return(MonoValidationTestType.TestRunnerCallbackChain);

                yield break;

            case ValidationTestCategory.MartinTest:
                yield return(MonoValidationTestType.MartinTest);

                yield break;

            default:
                ctx.AssertFail("Unspported validation category: '{0}.", category);
                yield break;
            }
        }
        static MonoValidationTestParameters Create(TestContext ctx, ValidationTestCategory category, MonoValidationTestType type)
        {
            var parameters = CreateParameters(category, type);

            switch (type)
            {
            case MonoValidationTestType.MartinTest:
                parameters.Host = "tlstest-1.xamdev.com";
                parameters.Add(CertificateResourceType.TlsTestXamDevNew);
                parameters.Add(CertificateResourceType.TlsTestXamDevCA);
                parameters.UseTestRunnerCallback = true;
                parameters.ExpectSuccess         = true;
                break;

            case MonoValidationTestType.NoHost:
                parameters.Host = null;
                parameters.Add(CertificateResourceType.TlsTestXamDevNew);
                parameters.Add(CertificateResourceType.TlsTestXamDevCA);
                parameters.ExpectSuccess = true;
                break;

            case MonoValidationTestType.EmptyHost:
                parameters.Host = string.Empty;
                parameters.Add(CertificateResourceType.TlsTestXamDevNew);
                parameters.Add(CertificateResourceType.TlsTestXamDevCA);

                /*
                 * Older versions of AppleTls prior to Xamarin.iOS 10 incorrectly
                 * returned success.
                 */
                parameters.ExpectSuccess = false;
                break;

            case MonoValidationTestType.WrongHost:
                parameters.Host = "invalid.xamdev-error.com";
                parameters.Add(CertificateResourceType.TlsTestXamDevNew);
                parameters.Add(CertificateResourceType.TlsTestXamDevCA);
                parameters.ExpectSuccess = false;
                break;

            case MonoValidationTestType.Success:
                parameters.Host = "tlstest-1.xamdev.com";
                parameters.Add(CertificateResourceType.TlsTestXamDevNew);
                parameters.Add(CertificateResourceType.TlsTestXamDevCA);
                parameters.ExpectSuccess = true;
                break;

            case MonoValidationTestType.RejectSelfSigned:
                parameters.Host = string.Empty;
                parameters.Add(CertificateResourceType.SelfSignedServerCertificate);
                parameters.ExpectSuccess = false;
                break;

            case MonoValidationTestType.RejectHamillerTube:
                parameters.Host = string.Empty;
                parameters.Add(CertificateResourceType.ServerCertificateFromLocalCA);
                parameters.Add(CertificateResourceType.HamillerTubeCA);
                parameters.ExpectSuccess = false;
                break;

            case MonoValidationTestType.TestRunnerCallback:
                parameters.Host = "tlstest-1.xamdev.com";
                parameters.Add(CertificateResourceType.TlsTestXamDevNew);
                parameters.Add(CertificateResourceType.TlsTestXamDevCA);
                parameters.UseTestRunnerCallback = true;
                parameters.ExpectSuccess         = true;
                break;

            case MonoValidationTestType.TestRunnerCallbackChain:
                parameters.Host = "tlstest-1.xamdev.com";
                parameters.Add(CertificateResourceType.TlsTestXamDevNew);
                parameters.Add(CertificateResourceType.TlsTestXamDevCA);
                parameters.AddExpectedChainEntry(CertificateResourceType.TlsTestXamDevNew);
                parameters.AddExpectedChainEntry(CertificateResourceType.TlsTestXamDevCA);
                parameters.UseTestRunnerCallback = true;
                parameters.ExpectSuccess         = true;
                break;

            default:
                ctx.AssertFail("Unsupported validation type: '{0}'.", type);
                break;
            }

            return(parameters);
        }
Exemple #5
0
        public static IEnumerable <BoringValidationTestType> GetTestTypes(TestContext ctx, ValidationTestCategory category)
        {
            switch (category)
            {
            case ValidationTestCategory.Default:
                yield return(BoringValidationTestType.Simple);

                yield return(BoringValidationTestType.NoTrustedRoots);

                yield return(BoringValidationTestType.ExplicitTrustedRoot);

                yield return(BoringValidationTestType.SslClientParameters);

                yield return(BoringValidationTestType.WrongPurpose);

                yield return(BoringValidationTestType.BeforeExpirationDate);

                yield return(BoringValidationTestType.AfterExpirationDate);

                yield return(BoringValidationTestType.CorrectHost);

                yield return(BoringValidationTestType.IncorrectHost);

                yield return(BoringValidationTestType.MissingIntermediateCert);

                yield return(BoringValidationTestType.WrongChainOrder);

                yield return(BoringValidationTestType.IntermediateServer);

                yield return(BoringValidationTestType.IntermediateServerChain);

                yield return(BoringValidationTestType.SelfSignedServer);

                yield return(BoringValidationTestType.MartinTest);

                yield break;

            default:
                ctx.AssertFail("Unspported validation category: '{0}.", category);
                yield break;
            }
        }
Exemple #6
0
        static BoringValidationTestParameters Create(TestContext ctx, ValidationTestCategory category, BoringValidationTestType type)
        {
            var parameters = CreateParameters(category, type);

            switch (type)
            {
            case BoringValidationTestType.Simple:
                parameters.Add(CertificateResourceType.TlsTestXamDevNew);
                parameters.Add(CertificateResourceType.TlsTestXamDevCA);
                parameters.VerifyParamType = BoringVerifyParamType.None;
                parameters.AddTrustedRoots = true;
                parameters.ExpectSuccess   = true;
                break;

            case BoringValidationTestType.SslClientParameters:
                parameters.Add(CertificateResourceType.TlsTestXamDevNew);
                parameters.Add(CertificateResourceType.TlsTestXamDevCA);
                parameters.VerifyParamType = BoringVerifyParamType.SslClient;
                parameters.AddTrustedRoots = true;
                parameters.ExpectSuccess   = true;
                break;

            case BoringValidationTestType.NoTrustedRoots:
                parameters.Add(CertificateResourceType.TlsTestXamDevNew);
                parameters.Add(CertificateResourceType.TlsTestXamDevCA);
                parameters.AddTrustedRoots = false;
                parameters.ExpectedResult  = BtlsX509Error.UNABLE_TO_GET_ISSUER_CERT_LOCALLY;
                break;

            case BoringValidationTestType.ExplicitTrustedRoot:
                parameters.Add(CertificateResourceType.ServerCertificateFromLocalCA);
                parameters.AddTrustedRoot(CertificateResourceType.HamillerTubeCA);
                parameters.ExpectSuccess = true;
                break;

            case BoringValidationTestType.BeforeExpirationDate:
                parameters.Add(CertificateResourceType.TlsTestXamDevExpired);
                parameters.Add(CertificateResourceType.TlsTestXamDevCA);
                parameters.VerifyParamType = BoringVerifyParamType.CopySslServer;
                parameters.CheckTime       = new DateTime(2016, 3, 17);
                parameters.AddTrustedRoots = true;
                parameters.ExpectSuccess   = true;
                break;

            case BoringValidationTestType.AfterExpirationDate:
                parameters.Add(CertificateResourceType.TlsTestXamDevExpired);
                parameters.Add(CertificateResourceType.TlsTestXamDevCA);
                parameters.VerifyParamType = BoringVerifyParamType.CopySslServer;
                parameters.CheckTime       = new DateTime(2016, 4, 17);
                parameters.ExpectedResult  = BtlsX509Error.CERT_HAS_EXPIRED;
                parameters.AddTrustedRoots = true;
                break;

            case BoringValidationTestType.WrongPurpose:
                parameters.Add(CertificateResourceType.ServerCertificateFromLocalCA);
                parameters.AddTrustedRoot(CertificateResourceType.HamillerTubeCA);
                parameters.VerifyParamType = BoringVerifyParamType.SslClient;
                parameters.ExpectedResult  = BtlsX509Error.INVALID_PURPOSE;
                break;

            case BoringValidationTestType.CorrectHost:
                parameters.Add(CertificateResourceType.ServerCertificateFromLocalCA);
                parameters.AddTrustedRoot(CertificateResourceType.HamillerTubeCA);
                parameters.VerifyParamType = BoringVerifyParamType.CopySslServer;
                parameters.Host            = "Hamiller-Tube.local";
                parameters.ExpectSuccess   = true;
                break;

            case BoringValidationTestType.IncorrectHost:
                parameters.Add(CertificateResourceType.ServerCertificateFromLocalCA);
                parameters.AddTrustedRoot(CertificateResourceType.HamillerTubeCA);
                parameters.VerifyParamType = BoringVerifyParamType.CopySslServer;
                parameters.Host            = "Hamiller-TubeX.local";
                parameters.ExpectedResult  = BtlsX509Error.HOSTNAME_MISMATCH;
                break;

            case BoringValidationTestType.MissingIntermediateCert:
                parameters.Add(CertificateResourceType.IntermediateServer);
                parameters.AddTrustedRoot(CertificateResourceType.HamillerTubeCA);
                parameters.VerifyParamType = BoringVerifyParamType.CopySslServer;
                parameters.Host            = "intermediate-server.local";
                parameters.ExpectedResult  = BtlsX509Error.UNABLE_TO_GET_ISSUER_CERT_LOCALLY;
                break;

            case BoringValidationTestType.IntermediateServer:
                parameters.Add(CertificateResourceType.IntermediateServer);
                parameters.Add(CertificateResourceType.IntermediateCA);
                parameters.AddTrustedRoot(CertificateResourceType.HamillerTubeCA);
                parameters.VerifyParamType = BoringVerifyParamType.CopySslServer;
                parameters.Host            = "intermediate-server.local";
                parameters.ExpectSuccess   = true;
                break;

            case BoringValidationTestType.IntermediateServerChain:
                parameters.Add(CertificateResourceType.IntermediateServer);
                parameters.Add(CertificateResourceType.IntermediateCA);
                parameters.AddTrustedRoot(CertificateResourceType.HamillerTubeCA);
                parameters.AddExpectedChainEntry(CertificateResourceType.IntermediateServer);
                parameters.AddExpectedChainEntry(CertificateResourceType.IntermediateCA);
                parameters.AddExpectedChainEntry(CertificateResourceType.HamillerTubeCA);
                parameters.VerifyParamType = BoringVerifyParamType.CopySslServer;
                parameters.Host            = "intermediate-server.local";
                parameters.ExpectSuccess   = true;
                break;

            case BoringValidationTestType.WrongChainOrder:
                parameters.Add(CertificateResourceType.IntermediateCA);
                parameters.Add(CertificateResourceType.IntermediateServer);
                parameters.AddTrustedRoot(CertificateResourceType.HamillerTubeCA);
                parameters.VerifyParamType = BoringVerifyParamType.CopySslServer;
                parameters.Host            = "intermediate-server.local";
                parameters.ExpectedResult  = BtlsX509Error.INVALID_PURPOSE;
                break;

            case BoringValidationTestType.SelfSignedServer:
                parameters.Add(CertificateResourceType.SelfSignedServerCertificate);
                parameters.VerifyParamType = BoringVerifyParamType.CopySslServer;
                parameters.ExpectedResult  = BtlsX509Error.DEPTH_ZERO_SELF_SIGNED_CERT;
                break;

            case BoringValidationTestType.MartinTest:
                parameters.Add(CertificateResourceType.TlsTestXamDevNew);
                parameters.Add(CertificateResourceType.TlsTestXamDevCA);
                parameters.AddTrustedRoots = true;
                parameters.ExpectSuccess   = true;
                break;

            default:
                ctx.AssertFail("Unsupported validation type: '{0}'.", type);
                break;
            }

            return(parameters);
        }
Exemple #7
0
 public ValidationTestCategoryAttribute(ValidationTestCategory category)
 {
     this.category   = category;
     this.identifier = Type.Name;
 }
 public ValidationTestParameters(ValidationTestCategory category, string identifier)
 {
     Category   = category;
     Identifier = identifier;
 }
Exemple #9
0
 public MonoValidationTestParameters(ValidationTestCategory category, MonoValidationTestType type, string identifier)
     : base(category, identifier)
 {
     Type = type;
 }