public void CloudBlobTestAnalyticsMetricsLevel()
        {
            CloudBlobClient client = GenerateCloudBlobClient();

            ServiceProperties props = client.GetServiceProperties();

            // None
            props.Metrics.MetricsLevel  = MetricsLevel.None;
            props.Metrics.RetentionDays = null;
            props.Metrics.Version       = "1.0";
            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());

            // Service
            props.Metrics.MetricsLevel = MetricsLevel.Service;
            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());

            // ServiceAndAPI
            props.Metrics.MetricsLevel = MetricsLevel.ServiceAndApi;
            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());
        }
        public void CloudBlobTestAnalyticsLoggingOperations()
        {
            CloudBlobClient client = GenerateCloudBlobClient();

            ServiceProperties props = client.GetServiceProperties();

            // None
            props.Logging.LoggingOperations = LoggingOperations.None;
            props.Logging.RetentionDays     = null;
            props.Logging.Version           = "1.0";

            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());

            // None
            props.Logging.LoggingOperations = LoggingOperations.All;
            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());
        }
        public void CloudBlobTestAnalyticsDefaultServiceVersion()
        {
            CloudBlobClient client = GenerateCloudBlobClient();

            ServiceProperties props = client.GetServiceProperties();

            props.DefaultServiceVersion = "2009-09-19";
            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());

            props.DefaultServiceVersion = "2011-08-18";
            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());

            props.DefaultServiceVersion = "2012-02-12";
            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());

            props.DefaultServiceVersion = null;
            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());
        }
        private void TestCorsRules(CloudBlobClient client, IList <CorsRule> corsProps)
        {
            props.Cors.CorsRules.Clear();

            foreach (CorsRule rule in corsProps)
            {
                props.Cors.CorsRules.Add(rule);
            }

            client.SetServiceProperties(props);
            TestHelper.AssertServicePropertiesAreEqual(props, client.GetServiceProperties());
        }
        static void UploadBlobInChunks(FileInfo fileInfo, CloudBlockBlob packageBlob, CloudBlobClient blobClient)
        {
            var operationContext = new OperationContext();
            operationContext.ResponseReceived += delegate(object sender, RequestEventArgs args)
            {
                var statusCode = (int) args.Response.StatusCode;
                var statusDescription = args.Response.StatusDescription;
                Log.Verbose("Uploading, response received: " + statusCode + " " + statusDescription);
                if (statusCode >= 400)
                {
                    Log.Error("Error when uploading the package. Azure returned a HTTP status code of: " +
                              statusCode + " " + statusDescription);
                    Log.Verbose("The upload will be retried");
                }
            };

            blobClient.SetServiceProperties(blobClient.GetServiceProperties(), operationContext: operationContext); 

            Log.VerboseFormat("Uploading the package to blob storage. The package file is {0}.", fileInfo.Length.ToFileSizeString());
            
            using (var fileReader = fileInfo.OpenRead())
            {
                var blocklist = new List<string>();

                long uploadedSoFar = 0;

                var data = new byte[1024 * 1024];
                var id = 1;

                while (true)
                {
                    id++;

                    var read = fileReader.Read(data, 0, data.Length);
                    if (read == 0)
                    {
                        packageBlob.PutBlockList(blocklist);
                        break;
                    }

                    var blockId = Convert.ToBase64String(Encoding.UTF8.GetBytes(id.ToString(CultureInfo.InvariantCulture).PadLeft(30, '0')));
                    packageBlob.PutBlock(blockId, new MemoryStream(data, 0, read, true), null);
                    blocklist.Add(blockId);

                    uploadedSoFar += read;

                    Log.VerboseFormat("Uploading package to blob storage: {0} of {1}", uploadedSoFar.ToFileSizeString(), fileInfo.Length.ToFileSizeString());
                }
            }

            Log.Verbose("Upload complete");
        }
        private static void UpdateServiceProperties(CloudBlobClient blobClient, List<string> origins, List<string> headers, List<string> methods)
        {
            ServiceProperties props = blobClient.GetServiceProperties();

            Trace.Write(props.Cors.CorsRules.ToString());

            if (! ContainsOrigin(props.Cors.CorsRules, origins))
            {
                props.Cors.CorsRules.Add(
                    new CorsRule
                    {
                        AllowedOrigins = origins,
                        AllowedHeaders = headers,
                        AllowedMethods = ExpandCorsHttpMethods(methods),
                        MaxAgeInSeconds = 1800 // 30 minutes
                    });
                blobClient.SetServiceProperties(props);
            }
        }
        private static ServiceProperties CurrentProperties(CloudBlobClient blobClient)
        {
            var currentProperties = blobClient.GetServiceProperties();
            if (currentProperties != null)
            {
                if (currentProperties.Cors != null)
                {
                    Console.WriteLine("Cors.CorsRules.Count          : " + currentProperties.Cors.CorsRules.Count);
                    for (int index = 0; index < currentProperties.Cors.CorsRules.Count; index++)
                    {
                        var corsRule = currentProperties.Cors.CorsRules[index];
                        Console.WriteLine("corsRule[index]              : " + index);
                        foreach (var allowedHeader in corsRule.AllowedHeaders)
                        {
                            Console.WriteLine("corsRule.AllowedHeaders      : " + allowedHeader);
                        }
                        Console.WriteLine("corsRule.AllowedMethods      : " + corsRule.AllowedMethods);

                        foreach (var allowedOrigins in corsRule.AllowedOrigins)
                        {
                            Console.WriteLine("corsRule.AllowedOrigins      : " + allowedOrigins);
                        }
                        foreach (var exposedHeaders in corsRule.ExposedHeaders)
                        {
                            Console.WriteLine("corsRule.ExposedHeaders      : " + exposedHeaders);
                        }
                        Console.WriteLine("corsRule.MaxAgeInSeconds     : " + corsRule.MaxAgeInSeconds);
                    }
                }
                Console.WriteLine("DefaultServiceVersion         : " + currentProperties.DefaultServiceVersion);
                Console.WriteLine("HourMetrics.MetricsLevel      : " + currentProperties.HourMetrics.MetricsLevel);
                Console.WriteLine("HourMetrics.RetentionDays     : " + currentProperties.HourMetrics.RetentionDays);
                Console.WriteLine("HourMetrics.Version           : " + currentProperties.HourMetrics.Version);
                Console.WriteLine("Logging.LoggingOperations     : " + currentProperties.Logging.LoggingOperations);
                Console.WriteLine("Logging.RetentionDays         : " + currentProperties.Logging.RetentionDays);
                Console.WriteLine("Logging.Version               : " + currentProperties.Logging.Version);
                Console.WriteLine("MinuteMetrics.MetricsLevel    : " + currentProperties.MinuteMetrics.MetricsLevel);
                Console.WriteLine("MinuteMetrics.RetentionDays   : " + currentProperties.MinuteMetrics.RetentionDays);
                Console.WriteLine("MinuteMetrics.Version         : " + currentProperties.MinuteMetrics.Version);
            }
            return currentProperties;
        }
        public void CloudBlobTestAnalyticsRoundTripSync()
        {
            CloudBlobClient client = GenerateCloudBlobClient();

            ServiceProperties props = new ServiceProperties();

            props.Logging.LoggingOperations = LoggingOperations.Read | LoggingOperations.Write;
            props.Logging.RetentionDays     = 5;
            props.Logging.Version           = "1.0";

            props.Metrics.MetricsLevel  = MetricsLevel.Service;
            props.Metrics.RetentionDays = 6;
            props.Metrics.Version       = "1.0";

            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());
        }
Exemple #9
0
 public azureDriver(string connStr, string containerName) {
   //var connStr = string.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", accountName, accountKey);
   CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connStr);
   blobClient = storageAccount.CreateCloudBlobClient();
   var props = blobClient.GetServiceProperties();
   if (props.Cors.CorsRules.Count == 0) {
     props.Cors.CorsRules.Add(new CorsRule() {
       AllowedHeaders = new List<string>() { "*" },
       AllowedMethods = CorsHttpMethods.Get,
       AllowedOrigins = new List<string>() { "*" },
       ExposedHeaders = new List<string>() { "*" },
       MaxAgeInSeconds = 18000 // 300 minutes
     });
     blobClient.SetServiceProperties(props);
   }
   container = blobClient.GetContainerReference(containerName);
   if (container.CreateIfNotExists()) container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
 }
        //******************
        //*                *
        //*  LoadLeftPane  *
        //*                *
        //******************
        // Load a list of storage containers/queues/tables into the left pane of the storage view.

        public void LoadLeftPane()
        {
            Cursor = Cursors.Wait;

            NewAction();

            AccountTitle.Text = Account.Name;

            ClearMainPane();

            TreeViewItem blobSection = new TreeViewItem()
            {
                Header = "Blob Containers",
                Tag = new OutlineItem()
                {
                    ItemType = ItemType.BLOB_SERVICE /* 100 */,
                    Container = null
                }
            };

            TreeViewItem queueSection = new TreeViewItem()
            {
                Header = "Queues",
                Tag = new OutlineItem()
                {
                    ItemType = ItemType.QUEUE_SERVICE /* 200 */,
                    Container = null
                }
            };

            TreeViewItem tableSection = new TreeViewItem()
            {
                Header = "Tables",
                Tag = new OutlineItem()
                {
                    ItemType = ItemType.TABLE_SERVICE /* 300 */,
                    Container = null
                }
            };

            AccountTreeView.Items.Clear();

            AccountTreeView.Items.Add(blobSection);
            AccountTreeView.Items.Add(queueSection);
            AccountTreeView.Items.Add(tableSection);

            CloudStorageAccount account = OpenStorageAccount();

            blobClient = account.CreateCloudBlobClient();
            tableClient = account.CreateCloudTableClient();
            queueClient = account.CreateCloudQueueClient();

            try
            { 
                var serviceProperties = blobClient.GetServiceProperties();

                if (serviceProperties.Cors.CorsRules.Count == 0)
                {
                    ButtonBlobServiceCORSIcon.Source = new BitmapImage(new Uri("pack://application:,,/Images/unchecked.png"));
                    ButtonBlobServiceCORSLabel.Text = "CORS";
                }
                else
                {
                    ButtonBlobServiceCORSIcon.Source = new BitmapImage(new Uri("pack://application:,,/Images/checked.png"));
                    ButtonBlobServiceCORSLabel.Text = "CORS (" + serviceProperties.Cors.CorsRules.Count.ToString() + ")";
                }
            }
            catch(Exception)
            {
                // Disallowed for developer storage account.
            }

            try
            {
                // Check for $logs container and add it if present ($logs is not included in the general ListContainers call).
                
                CloudBlobContainer logsContainer = blobClient.GetContainerReference("$logs");
                if (logsContainer.Exists())
                {
                    StackPanel stack = new StackPanel();
                    stack.Orientation = Orientation.Horizontal;

                    Image cloudFolderImage = new Image();
                    cloudFolderImage.Source = new BitmapImage(new Uri("pack://application:,,/Images/cloud_folder.png"));
                    cloudFolderImage.Height = 24;

                    Label label = new Label();
                    label.Content = logsContainer.Name;

                    stack.Children.Add(cloudFolderImage);
                    stack.Children.Add(label);

                    TreeViewItem blobItem = new TreeViewItem()
                    {
                        Header = stack,
                        Tag = new OutlineItem()
                        {
                            ItemType = ItemType.BLOB_CONTAINER,
                            Container = logsContainer.Name,
                            Permissions = logsContainer.GetPermissions()
                        }
                    };
                    blobSection.Items.Add(blobItem);
                }

                IEnumerable<CloudBlobContainer> containers = blobClient.ListContainers();
                if (containers != null)
                {
                    if (containers != null)
                    {
                        foreach (CloudBlobContainer container in containers)
                        {
                            StackPanel stack = new StackPanel();
                            stack.Orientation = Orientation.Horizontal;

                            Image cloudFolderImage = new Image();
                            cloudFolderImage.Source = new BitmapImage(new Uri("pack://application:,,/Images/cloud_folder.png"));
                            cloudFolderImage.Height = 24;

                            Label label = new Label();
                            label.Content = container.Name;

                            stack.Children.Add(cloudFolderImage);
                            stack.Children.Add(label);

                            TreeViewItem blobItem = new TreeViewItem()
                            {
                                Header = stack,
                                Tag = new OutlineItem()
                                {
                                    ItemType = ItemType.BLOB_CONTAINER,
                                    Container = container.Name,
                                    Permissions = container.GetPermissions()
                                }
                            };
                            blobSection.Items.Add(blobItem);
                        }
                    }
                }
                blobSection.Header = "Blob Containers (" + containers.Count().ToString() + ")";

                switch(LastItemType)
                {
                    case ItemType.BLOB_SERVICE:
                    case ItemType.BLOB_CONTAINER:
                        blobSection.IsExpanded = true;
                        break;
                    case ItemType.QUEUE_SERVICE:
                    case ItemType.QUEUE_CONTAINER:
                        queueSection.IsExpanded = true;
                        break;
                    case ItemType.TABLE_SERVICE:
                    case ItemType.TABLE_CONTAINER:
                        tableSection.IsExpanded = true;
                        break;
                    default:
                        blobSection.IsExpanded = true;
                        break;
                }


            }
            catch (Exception ex)
            {
                ShowError("Error enumering blob containers in the storage account: " + ex.Message);
            }

            try
            { 
                IEnumerable<CloudQueue> queues = queueClient.ListQueues();

                if (queues != null)
                {
                    foreach (CloudQueue queue in queues)
                    {
                        StackPanel stack = new StackPanel();
                        stack.Orientation = Orientation.Horizontal;

                        Image cloudFolderImage = new Image();
                        cloudFolderImage.Source = new BitmapImage(new Uri("pack://application:,,/Images/cloud_queue.png"));
                        cloudFolderImage.Height = 24;

                        Label label = new Label();
                        label.Content = queue.Name;

                        stack.Children.Add(cloudFolderImage);
                        stack.Children.Add(label);

                        queueSection.Items.Add(new TreeViewItem()
                        {
                            Header = stack,
                            Tag = new OutlineItem()
                            {
                                ItemType = ItemType.QUEUE_CONTAINER,
                                Container = queue.Name
                            }
                        });
                    }
                }
                queueSection.Header = "Queues (" + queues.Count().ToString() + ")";
            }
            catch (Exception ex)
            {
                ShowError("Error enumering queues in storage account: " + ex.Message);
            }

            // OData version number occurs here:
            // Could not load file or assembly 'Microsoft.Data.OData, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

            try
            {
                IEnumerable<CloudTable> tables = tableClient.ListTables();
                if (tables != null)
                {
                    foreach (CloudTable table in tables)
                    {
                        StackPanel stack = new StackPanel();
                        stack.Orientation = Orientation.Horizontal;

                        Image cloudFolderImage = new Image();
                        cloudFolderImage.Source = new BitmapImage(new Uri("pack://application:,,/Images/cloud_table.png"));
                        cloudFolderImage.Height = 24;

                        Label label = new Label();
                        label.Content = table.Name;

                        stack.Children.Add(cloudFolderImage);
                        stack.Children.Add(label);

                        tableSection.Items.Add(new TreeViewItem()
                        {
                            Header = stack,
                            Tag = new OutlineItem()
                            {
                                ItemType = ItemType.TABLE_CONTAINER,
                                Container = table.Name
                            }
                        });
                    }
                }
                tableSection.Header = "Tables (" + tables.Count().ToString() + ")";
            }
            catch(Exception ex)
            {
                ShowError("Error enumerating tables in storage account: " + ex.Message);
            }

            Cursor = Cursors.Arrow;
        }
        private  void SetCors(CloudBlobClient blobClient)
        {
            var newProperties = blobClient.GetServiceProperties();
            try
            {

           
            ConfigureCors(newProperties);
            var blobprop = blobClient.GetServiceProperties();
            // "2011-08-18"; // null;
                    blobClient.SetServiceProperties(newProperties);
                

                }
                catch (Exception ex)
                {

                    //throw;
                }
                
            
        }
 public static void MyClassInitialize(TestContext testContext)
 {
     client          = GenerateCloudBlobClient();
     startProperties = client.GetServiceProperties();
 }
        public void CloudBlobTestAnalyticsRoundTripSync()
        {
            props.Logging.LoggingOperations = LoggingOperations.Read | LoggingOperations.Write;
            props.Logging.RetentionDays     = 5;
            props.Logging.Version           = Constants.AnalyticsConstants.LoggingVersionV1;

            props.HourMetrics.MetricsLevel  = MetricsLevel.Service;
            props.HourMetrics.RetentionDays = 6;
            props.HourMetrics.Version       = Constants.AnalyticsConstants.MetricsVersionV1;

            props.MinuteMetrics.MetricsLevel  = MetricsLevel.Service;
            props.MinuteMetrics.RetentionDays = 6;
            props.MinuteMetrics.Version       = Constants.AnalyticsConstants.MetricsVersionV1;

            props.Cors.CorsRules.Add(
                new CorsRule()
            {
                AllowedOrigins = new List <string>()
                {
                    "www.ab.com", "www.bc.com"
                },
                AllowedMethods  = CorsHttpMethods.Get | CorsHttpMethods.Put,
                MaxAgeInSeconds = 500,
                ExposedHeaders  = new List <string>()
                {
                    "x-ms-meta-data*",
                    "x-ms-meta-source*",
                    "x-ms-meta-abc",
                    "x-ms-meta-bcd"
                },
                AllowedHeaders = new List <string>()
                {
                    "x-ms-meta-data*",
                    "x-ms-meta-target*",
                    "x-ms-meta-xyz",
                    "x-ms-meta-foo"
                }
            });

            client.SetServiceProperties(props);

            TestHelper.AssertServicePropertiesAreEqual(props, client.GetServiceProperties());
        }
        public void CloudBlobTestAnalyticsRetentionPolicies()
        {
            CloudBlobClient client = GenerateCloudBlobClient();

            ServiceProperties props = client.GetServiceProperties();

            // Set retention policy null with metrics disabled.
            props.Metrics.RetentionDays = null;
            props.Metrics.MetricsLevel  = MetricsLevel.None;
            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());

            // Set retention policy not null with metrics disabled.
            props.Metrics.RetentionDays = 1;
            props.Metrics.MetricsLevel  = MetricsLevel.Service;
            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());

            // Set retention policy not null with metrics enabled.
            props.Metrics.MetricsLevel  = MetricsLevel.ServiceAndApi;
            props.Metrics.RetentionDays = 2;
            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());

            // Set retention policy null with logging disabled.
            props.Logging.RetentionDays     = null;
            props.Logging.LoggingOperations = LoggingOperations.None;
            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());

            // Set retention policy not null with logging disabled.
            props.Logging.RetentionDays     = 3;
            props.Logging.LoggingOperations = LoggingOperations.None;
            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());

            // Set retention policy null with logging enabled.
            props.Logging.RetentionDays     = null;
            props.Logging.LoggingOperations = LoggingOperations.All;
            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());

            // Set retention policy not null with logging enabled.
            props.Logging.RetentionDays     = 4;
            props.Logging.LoggingOperations = LoggingOperations.All;
            client.SetServiceProperties(props);

            // Wait for analytics server to update
            Thread.Sleep(60 * 1000);
            AssertServicePropertiesAreEqual(props, client.GetServiceProperties());
        }
        private void TestCorsRules(CloudBlobClient client, IList<CorsRule> corsProps)
        {
            props.Cors.CorsRules.Clear();

            foreach (CorsRule rule in corsProps)
            {
                props.Cors.CorsRules.Add(rule);
            }

            client.SetServiceProperties(props);
            TestHelper.AssertServicePropertiesAreEqual(props, client.GetServiceProperties());
        }
 public static void MyClassInitialize(TestContext testContext)
 {
     client = GenerateCloudBlobClient();
     startProperties = client.GetServiceProperties();
 }