public GetBucketFileAccessModeResponse GetBucketFileAccessMode(GetBucketFileAccessModeRequest request)
        {
            IAsyncResult asyncResult;

            asyncResult = invokeGetBucketFileAccessMode(request, null, null, true);
            return(EndGetBucketFileAccessMode(asyncResult));
        }
        //[TestMethod]
        public void TestSetBucketFileAccessMode()
        {
            var setBucketRequest = new SetBucketFileAccessModeRequest()
            {
                BucketName = this.bucketName,
                AccessMode = FileAccessMode.ReadOnly,
                Duration   = (long)TimeSpan.FromSeconds(300).TotalSeconds,
                HostList   = new[] { "10.6.143.99", "10.6.143.100" }, // client IPs
                Uid        = "501"
            };

            using (var setBucketResponse = client.SetBucketFileAccessMode(setBucketRequest))
            {
                Assert.IsTrue(
                    setBucketRequest.AccessMode == setBucketResponse.AccessMode ||
                    GetBucketFileAccessModeRequest.TransitionsToState((FileAccessMode)setBucketRequest.AccessMode, setBucketResponse.AccessMode),
                    "wrong access mode");

                Assert.IsTrue(setBucketRequest.Duration - setBucketResponse.Duration <= TimeSpan.FromSeconds(60).TotalSeconds, "wrong duration");
                Assert.IsTrue(setBucketRequest.HostList.SequenceEqual(setBucketResponse.HostList), "wrong host list");
                Assert.AreEqual(setBucketRequest.Uid, setBucketResponse.Uid, "wrong Uid");
            }

            if (!WaitForTransition(FileAccessMode.ReadOnly, TimeSpan.FromMinutes(5)))
            {
                Assert.Inconclusive("file access transition timed out");
            }

            var getAccessRequest = new GetFileAccessRequest()
            {
                BucketName = this.bucketName
            };

            using (var getAccessResponse = client.GetFileAccess(getAccessRequest))
            {
                Assert.IsTrue(getAccessResponse.MountPoints != null && getAccessResponse.MountPoints.Count >= 1, "missing mount points");
                Assert.IsTrue(getAccessResponse.Objects != null && getAccessResponse.Objects.Count == 1, "missing objects");
            }

            var setAccessMode2Request = new SetBucketFileAccessModeRequest()
            {
                BucketName = this.bucketName,
                AccessMode = FileAccessMode.Disabled
            };

            using (var getAccessMode2Response = client.SetBucketFileAccessMode(setAccessMode2Request))
            {
            }

            if (!WaitForTransition(FileAccessMode.Disabled, TimeSpan.FromMinutes(5)))
            {
                Assert.Inconclusive("file access transition timed out");
            }
        }
        private void ConvertGetBucketFileAccessMode(GetBucketFileAccessModeRequest request)
        {
            var parameters = request.parameters;
            WebHeaderCollection webHeaders = request.Headers;

            parameters[S3QueryParameter.Verb]   = S3Constants.GetVerb;
            parameters[S3QueryParameter.Action] = "GetBucketFileAccessMode";
            parameters[S3QueryParameter.Query]  = parameters[S3QueryParameter.QueryToSign] = "?" + ViPRConstants.ACCESS_MODE_PARAMETER;

            request.RequestDestinationBucket = request.BucketName;
        }
        public void TestGetBucketFileAccessMode()
        {
            var request = new GetBucketFileAccessModeRequest()
            {
                BucketName = this.bucketName
            };

            using (var response = client.GetBucketFileAccessMode(request))
            {
                Debug.WriteLine("AccessMode: " + response.AccessMode);
                Assert.AreEqual(FileAccessMode.Disabled, response.AccessMode);
            }
        }
        IAsyncResult invokeGetBucketFileAccessMode(GetBucketFileAccessModeRequest request, AsyncCallback callback, object state, bool synchronized)
        {
            if (request == null)
            {
                throw new ArgumentNullException(S3Constants.RequestParam, "The GetBucketFileAccessModeRequest is null!");
            }
            if (string.IsNullOrEmpty(request.BucketName))
            {
                throw new ArgumentNullException(S3Constants.RequestParam, "The bucket name parameter must be specified when querying access mode");
            }

            ConvertGetBucketFileAccessMode(request);
            S3AsyncResult asyncResult = new S3AsyncResult(request, state, callback, synchronized);

            invoke <GetBucketFileAccessModeResponse>(asyncResult);
            return(asyncResult);
        }
        private bool WaitForTransition(FileAccessMode targetMode, TimeSpan timeout)
        {
            DateTime timeoutTime = DateTime.Now + timeout;

            if (GetBucketFileAccessModeRequest.IsTransitionState(targetMode))
            {
                throw new ArgumentException("Invalid target mode: " + targetMode);
            }

            this.TestContext.WriteLine(
                "Waiting for file access mode transition. Bucket:{0}, Target: {1}",
                this.bucketName, targetMode);

            while (true)
            {
                var request = new GetBucketFileAccessModeRequest()
                {
                    BucketName = this.bucketName
                };
                using (var response = client.GetBucketFileAccessMode(request))
                {
                    if (response.AccessMode == targetMode)
                    {
                        this.TestContext.WriteLine(
                            "Successful transition.  Target: {0}", targetMode);
                        return(true);
                    }

                    if (DateTime.Now > timeoutTime)
                    {
                        this.TestContext.WriteLine(
                            "Timeout occurred waiting for transition.  Current: {0}, Target: {1}",
                            response.AccessMode, targetMode);
                        return(false);
                    }
                }

                System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5));
            }
        }
 public IAsyncResult BeginGetBucketFileAccessMode(GetBucketFileAccessModeRequest request, AsyncCallback callback, object state)
 {
     return(invokeGetBucketFileAccessMode(request, callback, state, false));
 }