public override void ExecuteCmdlet()
        {
            try
            {
                if (!ProcessParameters())
                {
                    return;
                }

                this.ConfirmAction(
                    Force.IsPresent,
                    string.Format(Resources.StartAzureStorSimpleBackupCloneJobWarningMessage, BackupId),
                    string.Format(Resources.StartAzureStorSimpleBackupCloneJobMessage, BackupId),
                    BackupId,
                    () =>
                {
                    JobResponse response = null;
                    var request          = new TriggerCloneRequest()
                    {
                        TargetDeviceId   = targetDeviceId,
                        BackupSetId      = BackupId,
                        SourceSnapshot   = Snapshot,
                        ReturnWorkflowId = true,
                        TargetVolName    = CloneVolumeName,
                        TargetACRList    = TargetAccessControlRecords ?? new List <AccessControlRecord>()
                    };
                    response = StorSimpleClient.CloneVolume(sourceDeviceId, request);
                    HandleDeviceJobResponse(response, "start");
                }
                    );
            }
            catch (Exception ex)
            {
                this.HandleException(ex);
            }
        }
        /// <summary>
        /// Clone a backup element.
        /// </summary>
        /// <param name='sourceDeviceId'>
        /// Required. The identifier of the source device from which clone is
        /// to be triggered
        /// </param>
        /// <param name='triggerCloneRequest'>
        /// Required. The parameters required for clone operation
        /// </param>
        /// <param name='customRequestHeaders'>
        /// Required. The Custom Request Headers which client must use
        /// </param>
        /// <param name='cancellationToken'>
        /// Cancellation token.
        /// </param>
        /// <returns>
        /// This is the Job Response for all Device Job Related Calls
        /// </returns>
        public async Task <JobResponse> TriggerAsync(string sourceDeviceId, TriggerCloneRequest triggerCloneRequest, CustomRequestHeaders customRequestHeaders, CancellationToken cancellationToken)
        {
            // Validate
            if (sourceDeviceId == null)
            {
                throw new ArgumentNullException("sourceDeviceId");
            }
            if (triggerCloneRequest == null)
            {
                throw new ArgumentNullException("triggerCloneRequest");
            }
            if (triggerCloneRequest.BackupSetId == null)
            {
                throw new ArgumentNullException("triggerCloneRequest.BackupSetId");
            }
            if (triggerCloneRequest.SourceSnapshot == null)
            {
                throw new ArgumentNullException("triggerCloneRequest.SourceSnapshot");
            }
            if (triggerCloneRequest.SourceSnapshot.DataContainerId == null)
            {
                throw new ArgumentNullException("triggerCloneRequest.SourceSnapshot.DataContainerId");
            }
            if (triggerCloneRequest.SourceSnapshot.Id == null)
            {
                throw new ArgumentNullException("triggerCloneRequest.SourceSnapshot.Id");
            }
            if (triggerCloneRequest.SourceSnapshot.Name == null)
            {
                throw new ArgumentNullException("triggerCloneRequest.SourceSnapshot.Name");
            }
            if (triggerCloneRequest.SourceSnapshot.VolumeId == null)
            {
                throw new ArgumentNullException("triggerCloneRequest.SourceSnapshot.VolumeId");
            }
            if (triggerCloneRequest.TargetACRList != null)
            {
                foreach (AccessControlRecord targetACRListParameterItem in triggerCloneRequest.TargetACRList)
                {
                    if (targetACRListParameterItem.InitiatorName == null)
                    {
                        throw new ArgumentNullException("triggerCloneRequest.TargetACRList.InitiatorName");
                    }
                    if (targetACRListParameterItem.Name == null)
                    {
                        throw new ArgumentNullException("triggerCloneRequest.TargetACRList.Name");
                    }
                }
            }
            if (triggerCloneRequest.TargetDeviceId == null)
            {
                throw new ArgumentNullException("triggerCloneRequest.TargetDeviceId");
            }
            if (triggerCloneRequest.TargetVolName == null)
            {
                throw new ArgumentNullException("triggerCloneRequest.TargetVolName");
            }
            if (customRequestHeaders == null)
            {
                throw new ArgumentNullException("customRequestHeaders");
            }

            // Tracing
            bool   shouldTrace  = TracingAdapter.IsEnabled;
            string invocationId = null;

            if (shouldTrace)
            {
                invocationId = TracingAdapter.NextInvocationId.ToString();
                Dictionary <string, object> tracingParameters = new Dictionary <string, object>();
                tracingParameters.Add("sourceDeviceId", sourceDeviceId);
                tracingParameters.Add("triggerCloneRequest", triggerCloneRequest);
                tracingParameters.Add("customRequestHeaders", customRequestHeaders);
                TracingAdapter.Enter(invocationId, this, "TriggerAsync", tracingParameters);
            }

            // Construct URL
            string url = "";

            url = url + "/";
            if (this.Client.Credentials.SubscriptionId != null)
            {
                url = url + Uri.EscapeDataString(this.Client.Credentials.SubscriptionId);
            }
            url = url + "/cloudservices/";
            url = url + Uri.EscapeDataString(this.Client.CloudServiceName);
            url = url + "/resources/";
            url = url + Uri.EscapeDataString(this.Client.ResourceNamespace);
            url = url + "/~/";
            url = url + "CisVault";
            url = url + "/";
            url = url + Uri.EscapeDataString(this.Client.ResourceName);
            url = url + "/api/devices/";
            url = url + Uri.EscapeDataString(sourceDeviceId);
            url = url + "/clone";
            List <string> queryParameters = new List <string>();

            queryParameters.Add("api-version=2014-01-01.1.0");
            if (queryParameters.Count > 0)
            {
                url = url + "?" + string.Join("&", queryParameters);
            }
            string baseUrl = this.Client.BaseUri.AbsoluteUri;

            // Trim '/' character from the end of baseUrl and beginning of url.
            if (baseUrl[baseUrl.Length - 1] == '/')
            {
                baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
            }
            if (url[0] == '/')
            {
                url = url.Substring(1);
            }
            url = baseUrl + "/" + url;
            url = url.Replace(" ", "%20");

            // Create HTTP transport objects
            HttpRequestMessage httpRequest = null;

            try
            {
                httpRequest            = new HttpRequestMessage();
                httpRequest.Method     = HttpMethod.Post;
                httpRequest.RequestUri = new Uri(url);

                // Set Headers
                httpRequest.Headers.Add("Accept", "application/xml");
                httpRequest.Headers.Add("Accept-Language", customRequestHeaders.Language);
                httpRequest.Headers.Add("x-ms-client-request-id", customRequestHeaders.ClientRequestId);
                httpRequest.Headers.Add("x-ms-version", "2014-01-01");

                // Set Credentials
                cancellationToken.ThrowIfCancellationRequested();
                await this.Client.Credentials.ProcessHttpRequestAsync(httpRequest, cancellationToken).ConfigureAwait(false);

                // Serialize Request
                string    requestContent = null;
                XDocument requestDoc     = new XDocument();

                XElement cloneRequestV2Element = new XElement(XName.Get("CloneRequest_V2", "http://windowscloudbackup.com/CiS/V2013_03"));
                requestDoc.Add(cloneRequestV2Element);

                XElement backupSetIdElement = new XElement(XName.Get("BackupSetId", "http://windowscloudbackup.com/CiS/V2013_03"));
                backupSetIdElement.Value = triggerCloneRequest.BackupSetId;
                cloneRequestV2Element.Add(backupSetIdElement);

                XElement returnWorkflowIdElement = new XElement(XName.Get("ReturnWorkflowId", "http://windowscloudbackup.com/CiS/V2013_03"));
                returnWorkflowIdElement.Value = triggerCloneRequest.ReturnWorkflowId.ToString().ToLower();
                cloneRequestV2Element.Add(returnWorkflowIdElement);

                XElement sourceSnapshotElement = new XElement(XName.Get("SourceSnapshot", "http://windowscloudbackup.com/CiS/V2013_03"));
                cloneRequestV2Element.Add(sourceSnapshotElement);

                XElement dataContainerIdElement = new XElement(XName.Get("DataContainerId", "http://windowscloudbackup.com/CiS/V2013_03"));
                dataContainerIdElement.Value = triggerCloneRequest.SourceSnapshot.DataContainerId;
                sourceSnapshotElement.Add(dataContainerIdElement);

                XElement idElement = new XElement(XName.Get("Id", "http://windowscloudbackup.com/CiS/V2013_03"));
                idElement.Value = triggerCloneRequest.SourceSnapshot.Id;
                sourceSnapshotElement.Add(idElement);

                XElement nameElement = new XElement(XName.Get("Name", "http://windowscloudbackup.com/CiS/V2013_03"));
                nameElement.Value = triggerCloneRequest.SourceSnapshot.Name;
                sourceSnapshotElement.Add(nameElement);

                XElement sizeInBytesElement = new XElement(XName.Get("SizeInBytes", "http://windowscloudbackup.com/CiS/V2013_03"));
                sizeInBytesElement.Value = triggerCloneRequest.SourceSnapshot.SizeInBytes.ToString();
                sourceSnapshotElement.Add(sizeInBytesElement);

                XElement volumeIdElement = new XElement(XName.Get("VolumeId", "http://windowscloudbackup.com/CiS/V2013_03"));
                volumeIdElement.Value = triggerCloneRequest.SourceSnapshot.VolumeId;
                sourceSnapshotElement.Add(volumeIdElement);

                if (triggerCloneRequest.TargetACRIdList != null)
                {
                    XElement targetACRIdListSequenceElement = new XElement(XName.Get("TargetACRIdList", "http://windowscloudbackup.com/CiS/V2013_03"));
                    foreach (string targetACRIdListItem in triggerCloneRequest.TargetACRIdList)
                    {
                        XElement targetACRIdListItemElement = new XElement(XName.Get("string", "http://schemas.microsoft.com/2003/10/Serialization/Arrays"));
                        targetACRIdListItemElement.Value = targetACRIdListItem;
                        targetACRIdListSequenceElement.Add(targetACRIdListItemElement);
                    }
                    cloneRequestV2Element.Add(targetACRIdListSequenceElement);
                }
                else
                {
                    XElement   emptyElement = new XElement(XName.Get("TargetACRIdList", "http://windowscloudbackup.com/CiS/V2013_03"));
                    XAttribute nilAttribute = new XAttribute(XName.Get("nil", "http://www.w3.org/2001/XMLSchema-instance"), "");
                    nilAttribute.Value = "true";
                    emptyElement.Add(nilAttribute);
                    cloneRequestV2Element.Add(emptyElement);
                }

                if (triggerCloneRequest.TargetACRList != null)
                {
                    XElement targetACRListSequenceElement = new XElement(XName.Get("TargetACRList", "http://windowscloudbackup.com/CiS/V2013_03"));
                    foreach (AccessControlRecord targetACRListItem in triggerCloneRequest.TargetACRList)
                    {
                        XElement accessControlRecordElement = new XElement(XName.Get("AccessControlRecord", "http://windowscloudbackup.com/CiS/V2013_03"));
                        targetACRListSequenceElement.Add(accessControlRecordElement);

                        if (targetACRListItem.InstanceId != null)
                        {
                            XElement instanceIdElement = new XElement(XName.Get("InstanceId", "http://windowscloudbackup.com/CiS/V2013_03"));
                            instanceIdElement.Value = targetACRListItem.InstanceId;
                            accessControlRecordElement.Add(instanceIdElement);
                        }

                        XElement nameElement2 = new XElement(XName.Get("Name", "http://windowscloudbackup.com/CiS/V2013_03"));
                        nameElement2.Value = targetACRListItem.Name;
                        accessControlRecordElement.Add(nameElement2);

                        if (targetACRListItem.GlobalId != null)
                        {
                            XElement globalIdElement = new XElement(XName.Get("GlobalId", "http://schemas.datacontract.org/2004/07/Microsoft.Internal.CiS.Service.Interface.Portal"));
                            globalIdElement.Value = targetACRListItem.GlobalId;
                            accessControlRecordElement.Add(globalIdElement);
                        }
                        else
                        {
                            XElement   emptyElement2 = new XElement(XName.Get("GlobalId", "http://schemas.datacontract.org/2004/07/Microsoft.Internal.CiS.Service.Interface.Portal"));
                            XAttribute nilAttribute2 = new XAttribute(XName.Get("nil", "http://www.w3.org/2001/XMLSchema-instance"), "");
                            nilAttribute2.Value = "true";
                            emptyElement2.Add(nilAttribute2);
                            accessControlRecordElement.Add(emptyElement2);
                        }

                        XElement operationInProgressElement = new XElement(XName.Get("OperationInProgress", "http://windowscloudbackup.com/CiS/V2013_03"));
                        operationInProgressElement.Value = targetACRListItem.OperationInProgress.ToString();
                        accessControlRecordElement.Add(operationInProgressElement);

                        XElement initiatorNameElement = new XElement(XName.Get("InitiatorName", "http://windowscloudbackup.com/CiS/V2013_03"));
                        initiatorNameElement.Value = targetACRListItem.InitiatorName;
                        accessControlRecordElement.Add(initiatorNameElement);

                        XElement volumeCountElement = new XElement(XName.Get("VolumeCount", "http://windowscloudbackup.com/CiS/V2013_03"));
                        volumeCountElement.Value = targetACRListItem.VolumeCount.ToString();
                        accessControlRecordElement.Add(volumeCountElement);
                    }
                    cloneRequestV2Element.Add(targetACRListSequenceElement);
                }

                XElement targetDeviceIdElement = new XElement(XName.Get("TargetDeviceId", "http://windowscloudbackup.com/CiS/V2013_03"));
                targetDeviceIdElement.Value = triggerCloneRequest.TargetDeviceId;
                cloneRequestV2Element.Add(targetDeviceIdElement);

                XElement targetVolNameElement = new XElement(XName.Get("TargetVolName", "http://windowscloudbackup.com/CiS/V2013_03"));
                targetVolNameElement.Value = triggerCloneRequest.TargetVolName;
                cloneRequestV2Element.Add(targetVolNameElement);

                requestContent      = requestDoc.ToString();
                httpRequest.Content = new StringContent(requestContent, Encoding.UTF8);
                httpRequest.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/xml; charset=utf-8");

                // Send Request
                HttpResponseMessage httpResponse = null;
                try
                {
                    if (shouldTrace)
                    {
                        TracingAdapter.SendRequest(invocationId, httpRequest);
                    }
                    cancellationToken.ThrowIfCancellationRequested();
                    httpResponse = await this.Client.HttpClient.SendAsync(httpRequest, cancellationToken).ConfigureAwait(false);

                    if (shouldTrace)
                    {
                        TracingAdapter.ReceiveResponse(invocationId, httpResponse);
                    }
                    HttpStatusCode statusCode = httpResponse.StatusCode;
                    if (statusCode != HttpStatusCode.Accepted)
                    {
                        cancellationToken.ThrowIfCancellationRequested();
                        CloudException ex = CloudException.Create(httpRequest, requestContent, httpResponse, await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false));
                        if (shouldTrace)
                        {
                            TracingAdapter.Error(invocationId, ex);
                        }
                        throw ex;
                    }

                    // Create Result
                    JobResponse result = null;
                    // Deserialize Response
                    if (statusCode == HttpStatusCode.Accepted)
                    {
                        cancellationToken.ThrowIfCancellationRequested();
                        string responseContent = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);

                        result = new JobResponse();
                        XDocument responseDoc = XDocument.Parse(responseContent);

                        XElement stringElement = responseDoc.Element(XName.Get("string", "http://schemas.microsoft.com/2003/10/Serialization/"));
                        if (stringElement != null)
                        {
                            string stringInstance = stringElement.Value;
                            result.JobId = stringInstance;
                        }
                    }
                    result.StatusCode = statusCode;
                    if (httpResponse.Headers.Contains("x-ms-request-id"))
                    {
                        result.RequestId = httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault();
                    }

                    if (shouldTrace)
                    {
                        TracingAdapter.Exit(invocationId, result);
                    }
                    return(result);
                }
                finally
                {
                    if (httpResponse != null)
                    {
                        httpResponse.Dispose();
                    }
                }
            }
            finally
            {
                if (httpRequest != null)
                {
                    httpRequest.Dispose();
                }
            }
        }
        public void CloneScenarioSingleDeviceTest()
        {
            using (var context = UndoContext.Current)
            {
                context.Start();

                var client = GetServiceClient <StorSimpleManagementClient>();

                // Listing all Devices
                var devices = client.Devices.List(GetCustomRequestHeaders());

                // Asserting that atleast One Device is returned.
                Assert.True(devices != null);
                Assert.True(devices.Any());

                var actualdeviceId = devices.FirstOrDefault().DeviceId;
                actualdeviceId = actualdeviceId.Trim();
                CustomRequestHeaders hdrs = new CustomRequestHeaders();
                hdrs.ClientRequestId = Guid.NewGuid().ToString();
                hdrs.Language        = "en-us";

                //Get service configuration
                var serviceConfigList = client.ServiceConfig.Get(GetCustomRequestHeaders());

                Assert.True(serviceConfigList != null);

                var existingSac = serviceConfigList.CredentialChangeList.Updated.FirstOrDefault();

                Assert.True(existingSac != null);

                var dataContainerName = TestUtilities.GenerateName("DCName");

                // new Data container request object
                var dc = new DataContainerRequest();

                dc.IsDefault                       = false;
                dc.Name                            = dataContainerName;
                dc.BandwidthRate                   = 256;
                dc.VolumeCount                     = 0;
                dc.IsEncryptionEnabled             = false;
                dc.PrimaryStorageAccountCredential = existingSac;

                //Create DataContainer call
                var taskStatus = client.DataContainer.Create(actualdeviceId, dc, hdrs);

                //Assert the job status
                Assert.NotNull(taskStatus);
                Assert.True(taskStatus.Status == AsyncTaskStatus.Completed);
                Assert.True(taskStatus.Result == AsyncTaskResult.Succeeded);

                //Get Data Container call
                var Createddatacontainer = client.DataContainer.Get(actualdeviceId, dataContainerName, hdrs);

                //Assert the returned data container object
                Assert.True(Createddatacontainer != null);
                Assert.True(Createddatacontainer.DataContainerInfo.Name.Equals(dataContainerName));

                //ACR list for Virtual disk creation
                List <AccessControlRecord> acrList = new List <AccessControlRecord>();

                for (var i = 0; i < 1; i++)
                {
                    AccessControlRecord acr = new AccessControlRecord()
                    {
                        Name          = TestUtilities.GenerateName("VDnewTestAcr"),
                        InitiatorName = TestUtilities.GenerateName("VDinitiator") + i
                    };
                    acrList.Add(acr);
                }

                //Virtual disk create request object
                var virtualDiskToCreate = new VirtualDiskRequest()
                {
                    Name                   = TestUtilities.GenerateName("VD1Name"),
                    AccessType             = AccessType.ReadWrite,
                    AcrList                = acrList,
                    AppType                = AppType.PrimaryVolume,
                    IsDefaultBackupEnabled = true,
                    SizeInBytes            = 10737418240,
                    DataContainer          = Createddatacontainer.DataContainerInfo,
                    Online                 = true
                };

                //Virtual disk create call
                taskStatus = client.VirtualDisk.Create(actualdeviceId, virtualDiskToCreate, hdrs);

                //Asserting the job status
                Assert.NotNull(taskStatus);
                Assert.True(taskStatus.Status == AsyncTaskStatus.Completed);
                Assert.True(taskStatus.Result == AsyncTaskResult.Succeeded);

                //Virtual disk get call
                var createdVirtualDisk = client.VirtualDisk.GetByName(actualdeviceId, virtualDiskToCreate.Name, hdrs);

                Assert.True(createdVirtualDisk != null);
                Assert.True(createdVirtualDisk.VirtualDiskInfo.Name.Equals(virtualDiskToCreate.Name));

                var volumeIds = new List <string>();
                volumeIds.Add(createdVirtualDisk.VirtualDiskInfo.InstanceId);

                var dailySchedule = new BackupScheduleBase();
                dailySchedule.BackupType                 = BackupType.CloudSnapshot;
                dailySchedule.Status                     = ScheduleStatus.Enabled;
                dailySchedule.RetentionCount             = 5;
                dailySchedule.StartTime                  = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz");
                dailySchedule.Recurrence                 = new ScheduleRecurrence();
                dailySchedule.Recurrence.RecurrenceType  = RecurrenceType.Daily;
                dailySchedule.Recurrence.RecurrenceValue = 5;

                var backupPolicyToCreate = new NewBackupPolicyConfig();
                backupPolicyToCreate.Name            = TestUtilities.GenerateName("PolicyName");
                backupPolicyToCreate.VolumeIds       = volumeIds;
                backupPolicyToCreate.BackupSchedules = new List <BackupScheduleBase>();
                backupPolicyToCreate.BackupSchedules.Add(dailySchedule);

                //BackupPolicy create call
                taskStatus = client.BackupPolicy.Create(actualdeviceId, backupPolicyToCreate, hdrs);

                //Asserting the job status
                Assert.NotNull(taskStatus);
                Assert.True(taskStatus.Status == AsyncTaskStatus.Completed);
                Assert.True(taskStatus.Result == AsyncTaskResult.Succeeded);

                //BackupPolicy list call
                var allBackupPolicies = client.BackupPolicy.List(actualdeviceId, hdrs);

                //Assert the returned BackupPolicy object
                Assert.True(allBackupPolicies != null);
                Assert.True(allBackupPolicies.Any());

                //BackupPolicy get by name call
                var createdBackupPolicy = client.BackupPolicy.GetBackupPolicyDetailsByName(actualdeviceId, backupPolicyToCreate.Name, hdrs);

                //Assert the returned BackupPolicy object
                Assert.True(createdBackupPolicy != null);
                Assert.True(createdBackupPolicy.BackupPolicyDetails.Name.Equals(backupPolicyToCreate.Name));

                BackupNowRequest backupNowRequest = new BackupNowRequest();
                backupNowRequest.Type = BackupType.CloudSnapshot;


                //BackupSets Create call
                taskStatus = client.Backup.Create(actualdeviceId, createdBackupPolicy.BackupPolicyDetails.InstanceId, backupNowRequest, hdrs);

                //Asserting the job status
                Assert.NotNull(taskStatus);
                Assert.True(taskStatus.Status == AsyncTaskStatus.Completed);
                Assert.True(taskStatus.Result == AsyncTaskResult.Succeeded);

                GetBackupResponse backupSetResult;

                do
                {
                    //BackupSets Get call
                    backupSetResult = client.Backup.Get(actualdeviceId, "BackupPolicy", Boolean.TrueString, null, null, null, null, null, hdrs);

                    Assert.True(backupSetResult != null);
                    Assert.True(backupSetResult.BackupSetsList != null);

                    TestUtilities.Wait(1000);
                } while (!backupSetResult.BackupSetsList.Any());

                var backupSet     = backupSetResult.BackupSetsList.First();
                var clonedVolName = createdVirtualDisk.VirtualDiskInfo.Name + "_Cloned";

                var triggerCloneRequest = new TriggerCloneRequest()
                {
                    BackupSetId      = backupSet.InstanceId,
                    TargetDeviceId   = actualdeviceId,
                    SourceSnapshot   = backupSet.Snapshots.First(),
                    TargetVolName    = clonedVolName,
                    ReturnWorkflowId = true,
                    TargetACRList    = createdVirtualDisk.VirtualDiskInfo.AcrList
                };

                var jobResponse = client.CloneVolume.Trigger(actualdeviceId, triggerCloneRequest, GetCustomRequestHeaders());
                //Asserting the job id.
                Assert.NotNull(jobResponse);
                Assert.True(jobResponse.JobId != Guid.Empty.ToString());

                GetDeviceJobResponse deviceJobResponse;
                do
                {
                    //DeviceJob Get call
                    deviceJobResponse = client.DeviceJob.Get(actualdeviceId, null, null, jobResponse.JobId, null, null, 0, 10, hdrs);
                    TestUtilities.Wait(1000);
                    Assert.True(deviceJobResponse.DeviceJobList != null);
                    Assert.True(deviceJobResponse.DeviceJobList.Count == 1);
                } while (deviceJobResponse.DeviceJobList.First().Status.Equals("Running", StringComparison.InvariantCultureIgnoreCase));

                Assert.True(deviceJobResponse.DeviceJobList != null);
                Assert.True(deviceJobResponse.DeviceJobList.First().Status.Equals("Completed", StringComparison.InvariantCultureIgnoreCase));
                VirtualDiskGetResponse virtualDiskGetResponse = client.VirtualDisk.GetByName(actualdeviceId, clonedVolName, GetCustomRequestHeaders());
                Assert.True(virtualDiskGetResponse != null);
                Assert.True(virtualDiskGetResponse.VirtualDiskInfo != null);
                Assert.True(virtualDiskGetResponse.VirtualDiskInfo.Name.Equals(clonedVolName, StringComparison.InvariantCultureIgnoreCase));
            }
        }
 public JobResponse CloneVolume(string deviceId, TriggerCloneRequest request)
 {
     return(this.GetStorSimpleClient().CloneVolume.Trigger(deviceId, request, this.GetCustomRequestHeaders()));
 }
 /// <summary>
 /// Clone a backup element.
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.WindowsAzure.Management.StorSimple.ICloneVolumeOperations.
 /// </param>
 /// <param name='sourceDeviceId'>
 /// Required. The identifier of the source device from which clone is
 /// to be triggered
 /// </param>
 /// <param name='triggerCloneRequest'>
 /// Required. The parameters required for clone operation
 /// </param>
 /// <param name='customRequestHeaders'>
 /// Required. The Custom Request Headers which client must use
 /// </param>
 /// <returns>
 /// This is the Job Response for all Device Job Related Calls
 /// </returns>
 public static Task <JobResponse> TriggerAsync(this ICloneVolumeOperations operations, string sourceDeviceId, TriggerCloneRequest triggerCloneRequest, CustomRequestHeaders customRequestHeaders)
 {
     return(operations.TriggerAsync(sourceDeviceId, triggerCloneRequest, customRequestHeaders, CancellationToken.None));
 }
 /// <summary>
 /// Clone a backup element.
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.WindowsAzure.Management.StorSimple.ICloneVolumeOperations.
 /// </param>
 /// <param name='sourceDeviceId'>
 /// Required. The identifier of the source device from which clone is
 /// to be triggered
 /// </param>
 /// <param name='triggerCloneRequest'>
 /// Required. The parameters required for clone operation
 /// </param>
 /// <param name='customRequestHeaders'>
 /// Required. The Custom Request Headers which client must use
 /// </param>
 /// <returns>
 /// This is the Job Response for all Device Job Related Calls
 /// </returns>
 public static JobResponse Trigger(this ICloneVolumeOperations operations, string sourceDeviceId, TriggerCloneRequest triggerCloneRequest, CustomRequestHeaders customRequestHeaders)
 {
     return(Task.Factory.StartNew((object s) =>
     {
         return ((ICloneVolumeOperations)s).TriggerAsync(sourceDeviceId, triggerCloneRequest, customRequestHeaders);
     }
                                  , operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult());
 }