Example #1
0
        public void GetRPTest()
        {
            using (UndoContext context = UndoContext.Current)
            {
                context.Start();
                var client = GetSiteRecoveryClient(CustomHttpHandler);
                JobQueryParameter jqp = new JobQueryParameter();
                var responseRP = client.RecoveryPlan.List(RequestHeaders);
                var response = client.RecoveryPlan.Get(responseRP.RecoveryPlans[0].ID, RequestHeaders);

                Assert.NotNull(response.RecoveryPlan);
                Assert.NotNull(response.RecoveryPlan.ID);
                Assert.NotNull(response.RecoveryPlan.Name);
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            }
        }
        public void GetJobTest()
        {
            using (UndoContext context = UndoContext.Current)
            {
                context.Start();
                var client = GetSiteRecoveryClient(CustomHttpHandler);
                JobQueryParameter jqp = new JobQueryParameter();
                var responseJobs = client.Jobs.List(jqp, RequestHeaders);
                string jobId = responseJobs.Jobs[0].ID;
                var response = client.Jobs.Get(jobId, RequestHeaders);

                Assert.NotNull(response.Job);
                Assert.NotNull(response.Job.ID);
                Assert.NotNull(response.Job.StartTime);
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            }
        }
        public void EnumerateJobsTest()
        {
            using (UndoContext context = UndoContext.Current)
            {
                context.Start();
                var client = GetSiteRecoveryClient(CustomHttpHandler);

                JobQueryParameter jqp = new JobQueryParameter();
                var response = client.Jobs.List(jqp, RequestHeaders);

                jqp.ObjectId = response.Jobs[0].TargetObjectId;
                response = client.Jobs.List(jqp, RequestHeaders);

                Assert.True(response.Jobs.Count > 0, "No Asr jobs found.");
                Assert.True(response.Jobs.All(job => !string.IsNullOrEmpty(job.ID)), "Job ID can't be null or empty");
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            }
        }
        /// <summary>
        /// Queries by Parameters.
        /// </summary>
        private void GetByParam()
        {
            JobQueryParameter jqp = new JobQueryParameter();

            if (this.StartTime.HasValue)
            {
                jqp.StartTime =
                    this.StartTime.Value.ToUniversalTime().ToBinary().ToString();
            }

            jqp.State = this.State;
            this.WriteJobs(RecoveryServicesClient.GetAzureSiteRecoveryJob(jqp).Jobs);
        }
        public void Update()
        {
            using (UndoContext context = UndoContext.Current)
            {
                context.Start();
                var client = GetSiteRecoveryClient(CustomHttpHandler);
                var requestHeaders = RequestHeaders;
                requestHeaders.AgentAuthenticationHeader = GenerateAgentAuthenticationHeader(requestHeaders.ClientRequestId);

                JobQueryParameter jqp = new JobQueryParameter();
                var responseRP = client.ProtectionProfile.List(RequestHeaders);

                string serializedHyperVReplicaAzureProfileManagementInput = null;
                foreach (var profile in responseRP.ProtectionProfiles)
                {
                    if (profile.ReplicationProvider == "HyperVReplicaAzure")
                    {
                        string subsId = null;

                        var obj =
                        DataContractUtils<HyperVReplicaAzureProtectionProfileDetails>.Deserialize(
                        profile.ReplicationProviderSetting);

                        var settings = new HyperVReplicaAzureProtectionProfileInput();
                        settings.AppConsistencyFreq = obj.AppConsistencyFreq;
                        settings.IsEncryptionEnabled = obj.IsEncryptionEnabled;
                        settings.OnlineIrStartTime = obj.OnlineIrStartTime;
                        settings.RecoveryPointHistoryDuration = obj.RecoveryPointHistoryDuration;
                        settings.ReplicationInterval = obj.ReplicationInterval;
                        settings.StorageAccounts = new List<CustomerStorageAccount>();
                        var storageAccount = new CustomerStorageAccount();
                        storageAccount.StorageAccountName = obj.ActiveStorageAccount.StorageAccountName;
                        subsId = storageAccount.SubscriptionId;
                        storageAccount.SubscriptionId = "MySubscriptionId";
                        settings.StorageAccounts.Add(storageAccount);

                        serializedHyperVReplicaAzureProfileManagementInput =
                            DataContractUtils<HyperVReplicaAzureProtectionProfileInput>.Serialize(settings);

                        // update the profile object.
                        var input = new UpdateProtectionProfileInput();
                        input.ReplicationProviderSettings = serializedHyperVReplicaAzureProfileManagementInput;

                        var responseUpdate = client.ProtectionProfile.Update(input, profile.ID, RequestHeaders);
                        var responseGet = client.ProtectionProfile.Get(profile.ID, RequestHeaders);

                        // check for subsid.
                        Assert.NotNull(responseGet.ProtectionProfile);

                        // revert the temp changes.
                        storageAccount.SubscriptionId = subsId;
                        serializedHyperVReplicaAzureProfileManagementInput =
                            DataContractUtils<HyperVReplicaAzureProtectionProfileInput>.Serialize(settings);

                        input.ReplicationProviderSettings = serializedHyperVReplicaAzureProfileManagementInput;
                        responseUpdate = client.ProtectionProfile.Update(
                            input,
                            profile.ID,
                            requestHeaders);
                        return;
                    }
                }
            }
        }
        public void CreateAndAssociateE2A(string provider)
        {
            using (UndoContext context = UndoContext.Current)
            {
                context.Start();
                var client = GetSiteRecoveryClient(CustomHttpHandler);
                var requestHeaders = RequestHeaders;
                requestHeaders.AgentAuthenticationHeader = GenerateAgentAuthenticationHeader(requestHeaders.ClientRequestId);

                JobQueryParameter jqp = new JobQueryParameter();
                var responseRP = client.ProtectionProfile.List(RequestHeaders);

                string serializedHyperVReplicaAzureProfileManagementInput = null;
                foreach (var profile in responseRP.ProtectionProfiles)
                {
                    if (profile.AssociationDetail[0].AssociationStatus == "Paired")
                    {
                        // Instead of creating new set of values. Picking the values from already paired cloud.
                        var obj =
                        DataContractUtils<HyperVReplicaAzureProtectionProfileDetails>.Deserialize(
                        profile.ReplicationProviderSetting);

                        var settings = new HyperVReplicaAzureProtectionProfileInput();
                        settings.AppConsistencyFreq = obj.AppConsistencyFreq;
                        settings.IsEncryptionEnabled = obj.IsEncryptionEnabled;
                        settings.OnlineIrStartTime = obj.OnlineIrStartTime;
                        settings.RecoveryPointHistoryDuration = obj.RecoveryPointHistoryDuration;
                        settings.ReplicationInterval = obj.ReplicationInterval;
                        settings.StorageAccounts = new List<CustomerStorageAccount>();
                        var storageAccount = new CustomerStorageAccount();
                        storageAccount.StorageAccountName = obj.ActiveStorageAccount.StorageAccountName;
                        storageAccount.SubscriptionId = obj.ActiveStorageAccount.SubscriptionId;
                        settings.StorageAccounts.Add(storageAccount);

                        serializedHyperVReplicaAzureProfileManagementInput =
                            DataContractUtils<HyperVReplicaAzureProtectionProfileInput>.Serialize(settings);
                    }
                }

                var responsePC = client.ProtectionContainer.List(RequestHeaders);

                foreach (var pc in responsePC.ProtectionContainers)
                {
                    if (string.IsNullOrWhiteSpace(pc.Role))
                    {
                        var input = new CreateAndAssociateProtectionProfileInput();

                        input.ProtectionProfileInput = new CreateProtectionProfileInput();
                        input.ProtectionProfileInput.Name = "PP1";
                        input.ProtectionProfileInput.ReplicationProvider = "HyperVReplicaAzure";
                        input.ProtectionProfileInput.ReplicationProviderSettings =
                            serializedHyperVReplicaAzureProfileManagementInput;

                        input.AssociationInput = new ProtectionProfileAssociationInput();
                        input.AssociationInput.PrimaryProtectionContainerId = pc.ID;
                        input.AssociationInput.RecoveryProtectionContainerId = AzureProtectionContainerId;

                        client.ProtectionProfile.CreateAndAssociate(input, requestHeaders);
                    }
                }

                //Assert.NotNull(response.);
                //Assert.NotNull(response.RecoveryPlan.ID);
                //Assert.NotNull(response.RecoveryPlan.Name);
                //Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            }
        }
        public void DissociateAndDelete()
        {
            using (UndoContext context = UndoContext.Current)
            {
                JobResponse response = null;
                context.Start();
                var client = GetSiteRecoveryClient(CustomHttpHandler);
                var requestHeaders = RequestHeaders;
                requestHeaders.AgentAuthenticationHeader = GenerateAgentAuthenticationHeader(requestHeaders.ClientRequestId);

                JobQueryParameter jqp = new JobQueryParameter();
                var responseRP = client.ProtectionProfile.List(RequestHeaders);

                foreach (var profile in responseRP.ProtectionProfiles)
                {
                    foreach (var associationDetail in profile.AssociationDetail)
                    {
                        if (associationDetail.AssociationStatus == "Paired")
                        {
                            var input = new CreateAndAssociateProtectionProfileInput();
                            input.AssociationInput.PrimaryProtectionContainerId = associationDetail.PrimaryProtectionContainerId;
                            input.AssociationInput.RecoveryProtectionContainerId = associationDetail.RecoveryProtectionContainerId;

                            response = client.ProtectionProfile.DissociateAndDelete(
                                profile.ID,
                                input,
                                requestHeaders);
                            break;
                        }
                    }
                }

                Assert.NotNull(response);
                Assert.NotNull(response.Job.ID);
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            }
        }
 /// <summary>
 /// Get Azure Site Recovery Job.
 /// </summary>
 /// <param name="jqp">Job query parameter.</param>
 /// <returns>Job list response</returns>
 public JobListResponse GetAzureSiteRecoveryJob(JobQueryParameter jqp)
 {
     return this.GetSiteRecoveryClient().Jobs.List(jqp, this.GetRequestHeaders());
 }
 /// <summary>
 /// Get the list of all jobs.
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.WindowsAzure.Management.SiteRecovery.IJobOperations.
 /// </param>
 /// <param name='parameters'>
 /// Optional. Job query parameter.
 /// </param>
 /// <param name='customRequestHeaders'>
 /// Optional. Request header parameters.
 /// </param>
 /// <returns>
 /// The response model for the list Jobs operation.
 /// </returns>
 public static Task<JobListResponse> ListAsync(this IJobOperations operations, JobQueryParameter parameters, CustomRequestHeaders customRequestHeaders)
 {
     return operations.ListAsync(parameters, customRequestHeaders, CancellationToken.None);
 }
 /// <summary>
 /// Get the list of all jobs.
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.WindowsAzure.Management.SiteRecovery.IJobOperations.
 /// </param>
 /// <param name='parameters'>
 /// Optional. Job query parameter.
 /// </param>
 /// <param name='customRequestHeaders'>
 /// Optional. Request header parameters.
 /// </param>
 /// <returns>
 /// The response model for the list Jobs operation.
 /// </returns>
 public static JobListResponse List(this IJobOperations operations, JobQueryParameter parameters, CustomRequestHeaders customRequestHeaders)
 {
     return Task.Factory.StartNew((object s) => 
     {
         return ((IJobOperations)s).ListAsync(parameters, customRequestHeaders);
     }
     , operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
 }
        private void RestartJobTest(string state)
        {
            using (UndoContext context = UndoContext.Current)
            {
                context.Start();    
                var client = GetSiteRecoveryClient(CustomHttpHandler);

                var requestHeaders = RequestHeaders;
                requestHeaders.AgentAuthenticationHeader = 
                    GenerateAgentAuthenticationHeader(requestHeaders.ClientRequestId);

                JobQueryParameter jqp = new JobQueryParameter();
                var responseJobs = client.Jobs.List(jqp, RequestHeaders);
                JobResponse response = null;
                try
                {
                    foreach (var job in responseJobs.Jobs)
                    {
                        if (job.State == state)
                        {
                            response = client.Jobs.Restart(job.ID, requestHeaders);
                        }
                    }
                }
                catch (CloudException cloudEx)
                {
                    if (cloudEx.Error.Code == "CannotRemediateSucceededWorkflow" ||
                        cloudEx.Error.Code == "CannotRemediateUnfinishedWorkflow" ||
                        cloudEx.Error.Code == "FeatureNotAllowed")
                    {
                        // Request was submitted but failed initial validation.
                        // But our scenario of restart job request was accepted, so test succeeded.
                        return;
                    }
                }

                Assert.NotNull(response.Job);
                Assert.NotNull(response.Job.ID);
                Assert.NotNull(response.Job.StartTime);
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            }
        }
        public void CancelJobTest()
        {
            using (UndoContext context = UndoContext.Current)
            {
                context.Start();
                var client = GetSiteRecoveryClient(CustomHttpHandler);

                var requestHeaders = RequestHeaders;
                requestHeaders.AgentAuthenticationHeader =
                    GenerateAgentAuthenticationHeader(requestHeaders.ClientRequestId);

                JobQueryParameter jqp = new JobQueryParameter();
                var responseJobs = client.Jobs.List(jqp, requestHeaders);
                var response = client.Jobs.Cancel(responseJobs.Jobs[0].ID, RequestHeaders);

                Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
            }
        }