/// <summary>
        /// Gets the free/busy status appointment information for User2 (as specified in ptfconfig) through testUserName's account.
        /// </summary>
        /// <param name="testUserName">The user who gets the free/busy status information.</param>
        /// <param name="password">The testUserName's password.</param>
        /// <returns>
        /// <para>"0": means "FreeBusy", which indicates brief information about the appointments on the calendar;</para>
        /// <para>"1": means "Detailed", which indicates detailed information about the appointments on the calendar;</para>
        /// <para>"2": means the appointment free/busy information can't be viewed or error occurs, which indicates the user has no permission to get information about the appointments on the calendar;</para>
        /// </returns>
        public string GetUserFreeBusyStatus(string testUserName, string password)
        {
            // Use the specified user for the web service client authentication
            string domain = Common.GetConfigurationPropertyValue("Domain", this.Site);
            this.availability.Credentials = new NetworkCredential(testUserName, password, domain);

            GetUserAvailabilityRequestType availabilityRequest = new GetUserAvailabilityRequestType();

            SerializableTimeZone timezone = new SerializableTimeZone()
            {
                Bias = 480,
                StandardTime = new SerializableTimeZoneTime() { Bias = 0, Time = "02:00:00", DayOrder = 5, Month = 10, DayOfWeek = "Sunday" },
                DaylightTime = new SerializableTimeZoneTime() { Bias = -60, Time = "02:00:00", DayOrder = 1, Month = 4, DayOfWeek = "Sunday" }
            };
            availabilityRequest.TimeZone = timezone;

            // Specifies the mailbox to query for availability information.
            string user = Common.GetConfigurationPropertyValue("AdminUserName", this.Site);
            EmailAddress emailAddress = new EmailAddress()
            {
                Address = string.IsNullOrEmpty(user) ? string.Empty : user + "@" + domain
            };

            MailboxData mailboxData = new MailboxData()
            {
                Email = emailAddress,
                AttendeeType = MeetingAttendeeType.Organizer,
            };

            availabilityRequest.MailboxDataArray = new MailboxData[] { mailboxData };

            // Identify the time to compare free/busy information.
            FreeBusyViewOptionsType freeBusyViewOptions = new FreeBusyViewOptionsType()
            {
                TimeWindow = new Duration() { StartTime = DateTime.Now, EndTime = DateTime.Now.AddHours(3) },
                RequestedView = FreeBusyViewType.Detailed,
                RequestedViewSpecified = true
            };

            availabilityRequest.FreeBusyViewOptions = freeBusyViewOptions;

            GetUserAvailabilityResponseType availabilityInfo = null;
            try
            {
                availabilityInfo = this.availability.GetUserAvailability(availabilityRequest);
            }
            catch (SoapException exception)
            {
                Site.Assert.Fail("Error occurs when getting free/busy status: {0}", exception.Message);
            }

            string freeBusyStatus = "3";
            FreeBusyResponseType[] freeBusyArray = availabilityInfo.FreeBusyResponseArray;
            if (freeBusyArray != null)
            {
                foreach (FreeBusyResponseType freeBusy in freeBusyArray)
                {
                    ResponseClassType responseClass = freeBusy.ResponseMessage.ResponseClass;
                    if (responseClass == ResponseClassType.Success)
                    {
                        // If the response FreeBusyViewType value is FreeBusy or Detailed, the freeBusyStatus is Detailed.
                        // If all the response FreeBusyViewType values are FreeBusy, the freeBusyStatus is FreeBusy;
                        if (freeBusy.FreeBusyView.FreeBusyViewType == FreeBusyViewType.Detailed)
                        {
                            freeBusyStatus = "1";
                        }
                        else if (freeBusy.FreeBusyView.FreeBusyViewType == FreeBusyViewType.FreeBusy)
                        {
                            if (freeBusyStatus != "1")
                            {
                                freeBusyStatus = "0";
                            }
                        }
                    }
                    else if (responseClass == ResponseClassType.Error)
                    {
                        if (freeBusy.ResponseMessage.ResponseCode == ResponseCodeType.ErrorNoFreeBusyAccess)
                        {
                            return "2";
                        }
                        else
                        {
                            Site.Assert.Fail("Error occurs when getting free/busy status. ErrorCode: {0}; ErrorMessage: {1}.", freeBusy.ResponseMessage.ResponseCode, freeBusy.ResponseMessage.MessageText);
                        }
                    }
                }
            }

            return freeBusyStatus;
        }