Beispiel #1
0
        public void OverwriteExistingCORSRuleOfXSCL()
        {
            Action <Constants.ServiceType> setCORSRules = (serviceType) =>
            {
                PSCorsRule[] corsRules = CORSRuleUtil.GetRandomValidCORSRules(random.Next(1, 5));

                Microsoft.WindowsAzure.Storage.Shared.Protocol.ServiceProperties serviceProperties = new Microsoft.WindowsAzure.Storage.Shared.Protocol.ServiceProperties();
                serviceProperties.Clean();
                serviceProperties.Cors = new CorsProperties();

                foreach (var rule in corsRules)
                {
                    serviceProperties.Cors.CorsRules.Add(new CorsRule()
                    {
                        AllowedHeaders  = rule.AllowedHeaders,
                        AllowedOrigins  = rule.AllowedOrigins,
                        ExposedHeaders  = rule.ExposedHeaders,
                        MaxAgeInSeconds = rule.MaxAgeInSeconds,
                        AllowedMethods  = (CorsHttpMethods)random.Next(1, 512)
                    });
                }

                SetSerivceProperties(serviceType, serviceProperties);
            };

            this.OverwriteCORSRules(setCORSRules, Constants.ServiceType.Blob);
            this.OverwriteCORSRules(setCORSRules, Constants.ServiceType.Queue);
            this.OverwriteCORSRules(setCORSRules, Constants.ServiceType.Table);
            this.OverwriteCORSRules(setCORSRules, Constants.ServiceType.File);
        }
Beispiel #2
0
        public void CORSRuleBoundaryTest()
        {
            // 64 allowed origins
            PSCorsRule[] corsRules = new PSCorsRule[1];
            corsRules[0] = new PSCorsRule()
            {
                AllowedOrigins  = CORSRuleUtil.GetRandomOrigins(64),
                AllowedMethods  = CORSRuleUtil.GetRandomMethods(),
                AllowedHeaders  = CORSRuleUtil.GetRandomHeaders(),
                ExposedHeaders  = CORSRuleUtil.GetRandomHeaders(),
                MaxAgeInSeconds = random.Next(1, 1000)
            };

            this.ValidateCORSRuleSetGet(corsRules);

            // Allowed origin "*"
            corsRules[0].AllowedOrigins = new string[] { "*" };
            this.ValidateCORSRuleSetGet(corsRules);

            // Origin length 256
            corsRules[0].AllowedOrigins    = CORSRuleUtil.GetRandomOrigins(3, true);
            corsRules[0].AllowedOrigins[0] = Utility.GenNameString("", 256);
            this.ValidateCORSRuleSetGet(corsRules);

            corsRules[0].AllowedOrigins = CORSRuleUtil.GetRandomOrigins();

            // Allowed header 64  defined headers
            corsRules[0].AllowedHeaders = CORSRuleUtil.GetRandomHeaders(64);
            this.ValidateCORSRuleSetGet(corsRules);

            // Allowed header 2 prefix headers
            corsRules[0].AllowedHeaders = CORSRuleUtil.GetRandomHeaders(null, 2);
            this.ValidateCORSRuleSetGet(corsRules);

            // Allowed header "*"
            corsRules[0].AllowedHeaders = new string[] { "*" };
            this.ValidateCORSRuleSetGet(corsRules);

            // Allowed header 256 chars
            corsRules[0].AllowedHeaders    = CORSRuleUtil.GetRandomHeaders(3, 0, true);
            corsRules[0].AllowedHeaders[0] = Utility.GenNameString("", 256);
            this.ValidateCORSRuleSetGet(corsRules);

            // Exposed header 64  defined headers
            corsRules[0].ExposedHeaders = CORSRuleUtil.GetRandomHeaders(64);
            this.ValidateCORSRuleSetGet(corsRules);

            // Exposed header 2 prefixed headers
            corsRules[0].ExposedHeaders = CORSRuleUtil.GetRandomHeaders(null, 2);
            this.ValidateCORSRuleSetGet(corsRules);

            // Exposed header "*"
            corsRules[0].ExposedHeaders = new string[] { "*" };
            this.ValidateCORSRuleSetGet(corsRules);

            // Exposed header 256 chars
            corsRules[0].ExposedHeaders    = CORSRuleUtil.GetRandomHeaders(3, 0, true);
            corsRules[0].ExposedHeaders[0] = Utility.GenNameString("", 256);
            this.ValidateCORSRuleSetGet(corsRules);
        }
        public void SetCORSRuleWithInvalidCredential()
        {
            Constants.ServiceType serviceType = GetRandomServiceType();
            var corsRules = CORSRuleUtil.GetRandomValidCORSRules(random.Next(1, 5));

            Test.Assert(!CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "Set CORS rules with invalid credential should fail.");
            CheckErrorMessage();
        }
Beispiel #4
0
        public void ChangeCORSRules()
        {
            Constants.ServiceType serviceType = GetRandomServiceType();

            try
            {
                PSCorsRule[] corsRules = CORSRuleUtil.GetRandomValidCORSRules(random.Next(1, 5));
                Test.Assert(CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules),
                            "Set cors rule to {0} service should succeed", serviceType);

                Test.Assert(CommandAgent.GetAzureStorageCORSRules(serviceType),
                            "Get CORS rule of {0} service should succeed.", serviceType);

                PSCorsRule[] newCorsRules = GetCORSRules();

                CORSRuleUtil.ValidateCORSRules(corsRules, newCorsRules);

                foreach (var corsRule in newCorsRules)
                {
                    switch (random.Next(0, 5))
                    {
                    case 0:
                        corsRule.AllowedHeaders = CORSRuleUtil.GetRandomHeaders();
                        break;

                    case 1:
                        corsRule.AllowedMethods = CORSRuleUtil.GetRandomMethods();
                        break;

                    case 2:
                        corsRule.AllowedOrigins = CORSRuleUtil.GetRandomOrigins();
                        break;

                    case 3:
                        corsRule.ExposedHeaders = CORSRuleUtil.GetRandomHeaders();
                        break;

                    case 4:
                        corsRule.MaxAgeInSeconds = random.Next(1, 1000);
                        break;
                    }
                }

                Test.Assert(CommandAgent.SetAzureStorageCORSRules(serviceType, newCorsRules),
                            "Set cors rule to {0} service should succeed", serviceType);

                Test.Assert(CommandAgent.GetAzureStorageCORSRules(serviceType),
                            "Set cors rule of {0} service should succeed", serviceType);

                PSCorsRule[] actualCORSRules = GetCORSRules();

                CORSRuleUtil.ValidateCORSRules(newCorsRules, actualCORSRules);
            }
            finally
            {
                ClearCorsRules(serviceType);
            }
        }
Beispiel #5
0
        public void OverwriteExistingCORSRuleOfCmdlet()
        {
            Action <Constants.ServiceType> setCORSRules = (serviceType) =>
            {
                PSCorsRule[] corsRules = CORSRuleUtil.GetRandomValidCORSRules(random.Next(1, 5));
                Test.Assert(CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules),
                            "Set cors rule to blob service should succeed");
            };

            this.OverwriteCORSRules(setCORSRules, Constants.ServiceType.Blob);
            this.OverwriteCORSRules(setCORSRules, Constants.ServiceType.Queue);
            this.OverwriteCORSRules(setCORSRules, Constants.ServiceType.Table);
            this.OverwriteCORSRules(setCORSRules, Constants.ServiceType.File);
        }
Beispiel #6
0
        public void RemoveCORSRulesTest()
        {
            // No CORS rule exist
            Constants.ServiceType serviceType = GetRandomServiceType();
            ClearCorsRules(serviceType);

            this.ValidateRemoveCORSRule(serviceType);

            // Set CORS rules with cmdlet
            serviceType = GetRandomServiceType();
            PSCorsRule[] corsRules = CORSRuleUtil.GetRandomValidCORSRules(random.Next(1, 5));
            Test.Assert(CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules),
                        "Set CORS rules to {0} service should succeed.", serviceType);
            this.ValidateRemoveCORSRule(serviceType);
        }
Beispiel #7
0
        private void ValidateCORSRuleSetGet(PSCorsRule[] corsRules)
        {
            Constants.ServiceType serviceType = GetRandomServiceType();

            try
            {
                Test.Assert(CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "Set cors rule  to {0} service should succeed", serviceType);

                Test.Assert(CommandAgent.GetAzureStorageCORSRules(serviceType), "Get CORS rules of {0} service should succeed", serviceType);

                CORSRuleUtil.ValidateCORSRules(corsRules, GetCORSRules());
            }
            finally
            {
                ClearCorsRules(serviceType);
            }
        }
Beispiel #8
0
        private void OverwriteCORSRules(Action <Constants.ServiceType> setCORSRules, Constants.ServiceType serviceType)
        {
            try
            {
                setCORSRules(serviceType);

                PSCorsRule[] newCorsRules = CORSRuleUtil.GetRandomValidCORSRules(random.Next(1, 5));

                Test.Assert(CommandAgent.SetAzureStorageCORSRules(serviceType, newCorsRules),
                            "Set cors rule to blob service should succeed");

                Test.Assert(CommandAgent.GetAzureStorageCORSRules(serviceType),
                            "Get cors rules of blob service should succeed.");

                PSCorsRule[] acturalRules = GetCORSRules();

                CORSRuleUtil.ValidateCORSRules(newCorsRules, acturalRules);
            }
            finally
            {
                ClearCorsRules(serviceType);
            }
        }
Beispiel #9
0
        public void SetCORSRuleNegativeTest()
        {
            // No allowed origins
            PSCorsRule[] corsRules = new PSCorsRule[1];
            corsRules[0] = new PSCorsRule()
            {
                AllowedOrigins  = new string[0],
                AllowedMethods  = CORSRuleUtil.GetRandomMethods(),
                AllowedHeaders  = CORSRuleUtil.GetRandomHeaders(),
                ExposedHeaders  = CORSRuleUtil.GetRandomHeaders(),
                MaxAgeInSeconds = random.Next(1, 1000)
            };
            Constants.ServiceType serviceType = GetRandomServiceType();

            Test.Assert(!CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "Set cors rule without allowed origin to {0} service should fail", serviceType);

            if (lang == Language.PowerShell)
            {
                ExpectedContainErrorMessage(NoOriginNoMethod0MaxCacheAgeError);
            }
            else
            {
                ExpectedContainErrorMessage("Error");
            }

            // No allowed methods
            corsRules[0].AllowedOrigins = CORSRuleUtil.GetRandomOrigins();
            corsRules[0].AllowedMethods = new string[0];

            serviceType = GetRandomServiceType();
            Test.Assert(!CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "Set cors rule without allowed method to {0} service should fail", serviceType);

            if (lang == Language.PowerShell)
            {
                ExpectedContainErrorMessage(NoOriginNoMethod0MaxCacheAgeError);
            }
            else
            {
                ExpectedContainErrorMessage(string.Format(InvalidMethodsError, string.Empty));
            }

            // Max age in second is negative.
            corsRules[0].AllowedMethods  = CORSRuleUtil.GetRandomMethods();
            corsRules[0].MaxAgeInSeconds = -1;

            serviceType = GetRandomServiceType();

            if (lang == Language.PowerShell)
            {
                Test.Assert(!CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "Set cors rule to {0} service should fail when max age is negative.", serviceType);
                ExpectedContainErrorMessage(NoOriginNoMethod0MaxCacheAgeError);
            }
            else
            {
                Test.Assert(CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "Set cors rule to {0} service should succeed when max age is negative.", serviceType);
            }

            // Length of one of allowed origins is greater than 256
            corsRules[0].MaxAgeInSeconds   = random.Next(1, 1000);
            corsRules[0].AllowedOrigins    = CORSRuleUtil.GetRandomOrigins();
            corsRules[0].AllowedOrigins[0] = Utility.GenNameString("origin", 251);

            serviceType = GetRandomServiceType();
            Test.Assert(!CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "Set cors rule to {0} service should fail, when allowed origin length is greater than 256.", serviceType);

            if (lang == Language.PowerShell)
            {
                ExpectedContainErrorMessage(CORSRuleInvalidError);
            }
            else
            {
                ExpectedContainErrorMessage(InvalidXMLNodeErrors);
            }

            //Count of allowed origin is more than 64.
            corsRules[0].AllowedOrigins = CORSRuleUtil.GetRandomOrigins(random.Next(65, 100));

            serviceType = GetRandomServiceType();
            Test.Assert(!CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "Allowed origins count is greater than 64, set cors rule {0} service should fail", serviceType);
            if (lang == Language.PowerShell)
            {
                ExpectedContainErrorMessage(CORSRuleInvalidError);
            }
            else
            {
                ExpectedContainErrorMessage(InvalidXMLNodeErrors);
            }

            // Invalid method name
            string invalidMethodName = Utility.GenNameString("");

            corsRules[0].AllowedOrigins    = CORSRuleUtil.GetRandomOrigins();
            corsRules[0].AllowedMethods    = CORSRuleUtil.GetRandomMethods();
            corsRules[0].AllowedMethods[0] = invalidMethodName;

            serviceType = GetRandomServiceType();
            Test.Assert(!CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "Inalid method name, set cors rule to {0} service should fail", serviceType);

            if (lang == Language.PowerShell)
            {
                ExpectedContainErrorMessage(string.Format("'{0}' is an invalid HTTP method", invalidMethodName));
            }
            else
            {
                ExpectedContainErrorMessage(string.Format(InvalidMethodsError, invalidMethodName.ToUpper()));
            }

            // More than 2 prefixed allowed headers
            corsRules[0].AllowedMethods = CORSRuleUtil.GetRandomMethods();
            corsRules[0].AllowedHeaders = CORSRuleUtil.GetRandomHeaders(null, random.Next(3, 10));

            serviceType = GetRandomServiceType();
            Test.Assert(!CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "More than 2 prefixed allowed headers, set cors rule to {0} service should fail", serviceType);
            if (lang == Language.PowerShell)
            {
                ExpectedContainErrorMessage(CORSRuleInvalidError);
            }
            else
            {
                ExpectedContainErrorMessage(InvalidXMLNodeErrors);
            }

            // More than 64 defined allowed headers
            corsRules[0].AllowedHeaders = CORSRuleUtil.GetRandomHeaders(random.Next(65, 100));

            serviceType = GetRandomServiceType();
            Test.Assert(!CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "More than 64 defined allowed headers, set cors rule to {0} service should fail", serviceType);
            if (lang == Language.PowerShell)
            {
                ExpectedContainErrorMessage(CORSRuleInvalidError);
            }
            else
            {
                ExpectedContainErrorMessage(InvalidXMLNodeErrors);
            }

            // Allowed header length greater than 256
            corsRules[0].AllowedHeaders    = CORSRuleUtil.GetRandomHeaders();
            corsRules[0].AllowedHeaders[0] = Utility.GenNameString("header", 251);

            serviceType = GetRandomServiceType();
            Test.Assert(!CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "Allowed header length greater than 256, set cors rule to {0} service should fail", serviceType);
            if (lang == Language.PowerShell)
            {
                ExpectedContainErrorMessage(CORSRuleInvalidError);
            }
            else
            {
                ExpectedContainErrorMessage(InvalidXMLNodeErrors);
            }

            // More than 2 prefixed exposed headers
            corsRules[0].AllowedMethods = CORSRuleUtil.GetRandomMethods();
            corsRules[0].ExposedHeaders = CORSRuleUtil.GetRandomHeaders(null, random.Next(3, 10));

            serviceType = GetRandomServiceType();
            Test.Assert(!CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "More than 2 prefixed exposed headers, set cors rule to {0} service should fail", serviceType);
            if (lang == Language.PowerShell)
            {
                ExpectedContainErrorMessage(CORSRuleInvalidError);
            }
            else
            {
                ExpectedContainErrorMessage(InvalidXMLNodeErrors);
            }

            // More than 64 defined exposed headers
            corsRules[0].ExposedHeaders = CORSRuleUtil.GetRandomHeaders(random.Next(65, 100));

            serviceType = GetRandomServiceType();
            Test.Assert(!CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "More than 64 defined exposed headers, set cors rule to {0} service should fail", serviceType);
            if (lang == Language.PowerShell)
            {
                ExpectedContainErrorMessage(CORSRuleInvalidError);
            }
            else
            {
                ExpectedContainErrorMessage(InvalidXMLNodeErrors);
            }

            // Exposed header length greater than 256
            corsRules[0].ExposedHeaders    = CORSRuleUtil.GetRandomHeaders();
            corsRules[0].ExposedHeaders[0] = Utility.GenNameString("header", 251);

            serviceType = GetRandomServiceType();
            Test.Assert(!CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "Exposed header length greater than 256, set cors rule to {0} service should fail", serviceType);
            if (lang == Language.PowerShell)
            {
                ExpectedContainErrorMessage(CORSRuleInvalidError);
            }
            else
            {
                ExpectedContainErrorMessage(InvalidXMLNodeErrors);
            }

            // big total size
            corsRules[0].AllowedOrigins = CORSRuleUtil.GetRandomOrigins(null, true);
            corsRules[0].AllowedHeaders = CORSRuleUtil.GetRandomHeaders(null, null, true);
            corsRules[0].ExposedHeaders = CORSRuleUtil.GetRandomHeaders(null, null, true);

            serviceType = GetRandomServiceType();
            Test.Assert(!CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "Exposed header length greater than 256, set cors rule to {0} service should fail", serviceType);
            if (lang == Language.PowerShell)
            {
                ExpectedContainErrorMessage(CORSRuleInvalidError);
            }
            else
            {
                var errors = InvalidXMLNodeErrors.ToList();
                errors.Add("The command line is too long");
                ExpectedContainErrorMessage(errors.ToArray());
            }

            // 6 CORS ruls
            corsRules = CORSRuleUtil.GetRandomValidCORSRules(6);

            serviceType = GetRandomServiceType();
            Test.Assert(!CommandAgent.SetAzureStorageCORSRules(serviceType, corsRules), "6 CORS rules, set cors rule to {0} service should fail", serviceType);
            if (lang == Language.PowerShell)
            {
                ExpectedContainErrorMessage(CORSRuleInvalidError);
            }
            else
            {
                ExpectedContainErrorMessage("You can only specify up to 5 CORS rules per storage service");
            }

            // Invalid Service Type
            corsRules = CORSRuleUtil.GetRandomValidCORSRules(random.Next(1, 5));

            if (lang == Language.PowerShell)
            {
                Test.Assert(!CommandAgent.SetAzureStorageCORSRules(Constants.ServiceType.InvalidService, corsRules), "Set cors rules to invalid service type should fail.");
                ExpectedContainErrorMessage(string.Format("Unable to match the identifier name {0} to a valid enumerator name. Specify one of the following enumerator names and try again:",
                                                          Constants.ServiceType.InvalidService.ToString()));
            }
        }
Beispiel #10
0
        public void GetServiceProperties_AllService_AllProperties()
        {
            //prepare the service properties to set and get
            PSCorsRule[] corsRules = CORSRuleUtil.GetRandomValidCORSRules(random.Next(1, 5));

            Microsoft.WindowsAzure.Storage.Shared.Protocol.ServiceProperties serviceProperties = new Microsoft.WindowsAzure.Storage.Shared.Protocol.ServiceProperties();
            serviceProperties.Clean();
            serviceProperties.Cors = new CorsProperties();

            foreach (var rule in corsRules)
            {
                CorsRule corsRule = new CorsRule()
                {
                    AllowedHeaders  = rule.AllowedHeaders,
                    AllowedOrigins  = rule.AllowedOrigins,
                    ExposedHeaders  = rule.ExposedHeaders,
                    MaxAgeInSeconds = rule.MaxAgeInSeconds,
                };
                SetAllowedMethods(corsRule, rule.AllowedMethods);
                serviceProperties.Cors.CorsRules.Add(corsRule);
            }
            serviceProperties.HourMetrics = new MetricsProperties("1.0");
            serviceProperties.HourMetrics.MetricsLevel    = MetricsLevel.ServiceAndApi;
            serviceProperties.HourMetrics.RetentionDays   = 1;
            serviceProperties.MinuteMetrics               = new MetricsProperties("1.0");
            serviceProperties.MinuteMetrics.MetricsLevel  = MetricsLevel.Service;
            serviceProperties.MinuteMetrics.RetentionDays = 3;

            serviceProperties.Logging = new LoggingProperties("1.0");
            serviceProperties.Logging.LoggingOperations = LoggingOperations.All;
            serviceProperties.Logging.RetentionDays     = 5;


            foreach (string servicetype in ValidServiceType)
            {
                Constants.ServiceType service = Constants.ServiceType.Blob;
                Enum.TryParse <Constants.ServiceType>(servicetype, true, out service);
                if (service == Constants.ServiceType.Blob) //only Blob support default service version
                {
                    serviceProperties.DefaultServiceVersion = "2017-04-17";

                    serviceProperties.DeleteRetentionPolicy               = new DeleteRetentionPolicy();
                    serviceProperties.DeleteRetentionPolicy.Enabled       = true;
                    serviceProperties.DeleteRetentionPolicy.RetentionDays = 10;
                }

                //Set Service Properties with XSCL API
                ServiceCORSRule.SetSerivceProperties(service, serviceProperties);

                //Get Service Properties with PowerShell
                PSSeriviceProperties properties = GetServicePropertiesFromPSH(service);

                //Validate Cors, metric, logging
                CORSRuleUtil.ValidateCORSRules(corsRules, properties.Cors);

                if (service != Constants.ServiceType.File) // File service don't support logging
                {
                    ExpectEqual(serviceProperties.Logging.Version, properties.Logging.Version, "Logging version");
                    ExpectEqual(serviceProperties.Logging.LoggingOperations.ToString(), properties.Logging.LoggingOperations.ToString(), "Logging Operations");
                    ExpectEqual(serviceProperties.Logging.RetentionDays.Value, properties.Logging.RetentionDays.Value, "Logging RetentionDays");
                }

                ExpectEqual(serviceProperties.HourMetrics.Version, properties.HourMetrics.Version, "HourMetrics Version");
                ExpectEqual(serviceProperties.HourMetrics.MetricsLevel.ToString(), properties.HourMetrics.MetricsLevel.ToString(), "HourMetrics MetricsLevel");
                ExpectEqual(serviceProperties.HourMetrics.RetentionDays.Value, properties.HourMetrics.RetentionDays.Value, "HourMetrics RetentionDays");

                ExpectEqual(serviceProperties.MinuteMetrics.Version, properties.MinuteMetrics.Version, "MinuteMetrics Version");
                ExpectEqual(serviceProperties.MinuteMetrics.MetricsLevel.ToString(), properties.MinuteMetrics.MetricsLevel.ToString(), "MinuteMetrics MetricsLevel");
                ExpectEqual(serviceProperties.MinuteMetrics.RetentionDays.Value, properties.MinuteMetrics.RetentionDays.Value, "MinuteMetrics RetentionDays");


                if (service == Constants.ServiceType.Blob)
                {
                    ExpectEqual(serviceProperties.DefaultServiceVersion, properties.DefaultServiceVersion, "DefaultServiceVersion");

                    ExpectEqual(serviceProperties.DeleteRetentionPolicy.Enabled.ToString(), properties.DeleteRetentionPolicy.Enabled.ToString(), "DeleteRetentionPolicy Enabled");
                    ExpectEqual(serviceProperties.DeleteRetentionPolicy.RetentionDays.Value, properties.DeleteRetentionPolicy.RetentionDays.Value, "DeleteRetentionPolicy RetentionDays");

                    serviceProperties.DeleteRetentionPolicy = null;
                    serviceProperties.DefaultServiceVersion = null;
                }
            }
        }