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); }
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(); }
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); } }
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); }
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); }
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); } }
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())); } }
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; } } }