private string GetJsonTextForNewDeviceDataForPostUpload() { /** BEGIN: Snippet to Update RAW Json Request with Base 64 String that was set from file **/ APIBuiltInTestCase selectedBuiltInTest = ( from i in BuiltInTestCaseRepo.Instance.AllTestCases where i.Name.Equals(cBBuiltInTests.Text) select i).FirstOrDefault(); if (chkBxUseFile.Checked && selectedBuiltInTest != null && selectedBuiltInTest.GetType().Equals(typeof(PostUploadTest)) && !string.IsNullOrEmpty(base64String)) { try { PostUploadDTO postUploadDTO = Newtonsoft.Json.JsonConvert.DeserializeObject <PostUploadDTO>(new Regex("(\r\n|\r|\n)").Replace(txtBxRequest.Text, "")); postUploadDTO.ActivityFiles.FirstOrDefault().DeviceData = base64String; JsonSerializerSettings jsonFormatter = new JsonSerializerSettings { Formatting = Newtonsoft.Json.Formatting.Indented, DateFormatHandling = DateFormatHandling.IsoDateFormat, DateTimeZoneHandling = DateTimeZoneHandling.Utc }; return(JsonConvert.SerializeObject(postUploadDTO, jsonFormatter)); } catch { } } /** END: Snippet to Update Json Request with Base 64 String **/ return(null); }
/// <summary> /// Updated 'Device Data' field in request text box /// </summary> /// <param name="value"></param> private void UpdateDeviceDataInRequestTextBoxForPostUpload(string value) { APIBuiltInTestCase apiTest = ( from i in BuiltInTestCaseRepo.Instance.AllTestCases where i.Name.Equals(cBBuiltInTests.Text) select i).FirstOrDefault(); if (apiTest.GetType().Equals(typeof(PostUploadTest))) { PostUploadDTO postUploadDTO = Newtonsoft.Json.JsonConvert.DeserializeObject <PostUploadDTO>(new Regex("(\r\n|\r|\n)").Replace(txtBxRequest.Text, "")); postUploadDTO.ActivityFiles.FirstOrDefault().DeviceData = value; JsonSerializerSettings jsonFormatter = new JsonSerializerSettings { Formatting = Newtonsoft.Json.Formatting.Indented, DateFormatHandling = DateFormatHandling.IsoDateFormat, DateTimeZoneHandling = DateTimeZoneHandling.Utc }; txtBxRequest.Text = JsonConvert.SerializeObject(postUploadDTO, jsonFormatter); } }
private async Task SendRequest(long requestNumber, long totalRequests) { APIEndpointExecuter apiEndpointExecuter = null; APIEndpointExecuterResult apiEndpointExecuterResult = null; string jsonResponse = string.Empty; string jsonRequestRaw = txtBxRequest.Text; DateTimeOffset requestTime; DateTime responseTime; try { // Clear Status Code label lblStatusCode.Text = String.Empty; btnCompareResponse.Enabled = false; // remove trailing '/' from baseURI if (txtBaseURI.Text.EndsWith("/")) { txtBaseURI.Text = txtBaseURI.Text.Remove(txtBaseURI.Text.Length - 1, 1); } if (!txtBxURI.Text.StartsWith("/")) { txtBxURI.Text = "/" + txtBxURI.Text; // add trailing '/' to uri if it doesnt exist } // Updating Client State Before Execution ClientState.BaseURI = txtBaseURI.Text; ClientState.AccessKey = txtBxAccessKey.Text; ClientState.SecretKey = txtBxSecretKey.Text; // Create Endpoint Executer apiEndpointExecuter = new APIEndpointExecuter(ClientState.BaseURI + txtBxURI.Text, (HttpMethod)cbHttpMethod.SelectedItem); // Hide "Waiting For Response..." label lblStatus.Text = "[ " + requestNumber + " / " + totalRequests + " ] Waiting For Response..."; lblStatus.Visible = true; // disable send request button while text is running btnSendRequest.Enabled = false; /** BEGIN: Snippet to Update RAW Json Request with Base 64 String that was set from file **/ APIBuiltInTestCase selectedBuiltInTest = ( from i in BuiltInTestCaseRepo.Instance.AllTestCases where i.Name.Equals(cBBuiltInTests.Text) select i).FirstOrDefault(); if (chkBxUseFile.Checked && selectedBuiltInTest != null && selectedBuiltInTest.GetType().Equals(typeof(PostUploadTest)) && !string.IsNullOrEmpty(base64String)) { try { jsonRequestRaw = GetJsonTextForNewDeviceDataForPostUpload(); } catch { } } /** END: Snippet to Update Json Request with Base 64 String **/ // await for async method to finish apiEndpointExecuterResult = await apiEndpointExecuter.Run(new Regex("(\r\n|\r|\n)").Replace(jsonRequestRaw, "")); jsonResponse = apiEndpointExecuterResult.ResponseContent; // Set last Json response for tool lastJsonResponse = jsonResponse; // Hide status label lblStatus.Visible = false; // Enable Compare Button btnCompareResponse.Enabled = true; // Update Response Status Code if (apiEndpointExecuterResult.Response.StatusCode.Equals(System.Net.HttpStatusCode.OK) || apiEndpointExecuterResult.Response.StatusCode.Equals(System.Net.HttpStatusCode.Created)) { lblStatusCode.ForeColor = Color.Green; lblStatusCode.Image = StudyAdminAPITester.Properties.Resources.check_smaller; } else { lblStatusCode.ForeColor = Color.Red; lblStatusCode.Image = StudyAdminAPITester.Properties.Resources.cancel_small; } lblStatusCode.ImageAlign = ContentAlignment.MiddleLeft; lblStatusCode.Text = string.Format(" HTTP Status Code {0} {1}", (int)apiEndpointExecuterResult.Response.StatusCode, (string)apiEndpointExecuterResult.Response.StatusCode.ToString()); // Update Log lblStatus.Text = "[ " + requestNumber + " / " + totalRequests + " ] Updating Response Log..."; lblStatus.Visible = true; this.Refresh(); InsertResposneToLog(jsonResponse, apiEndpointExecuterResult.Response.StatusCode); InsertRequestToLog(apiEndpointExecuter, apiEndpointExecuterResult, txtBxRequest.Text); txtBxResponse.Text = await Task.Run(() => { return(sbLog.ToString()); }); // Hide status label lblStatus.Visible = false; // Focus on Response text box txtBxResponse.Focus(); } catch (HttpRequestException) { lblError.Text = string.Format("A problem occured while sending request to {0}", apiEndpointExecuter._Uri); } catch (Exception) // Catch Everything else { lblError.Text = "A problem has occured. Please contact the Study Admin Team."; } finally { lblStatus.Visible = false; } }
public TestForm() { InitializeComponent(); sbLog = new StringBuilder(); System.Version current = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; //Major.Minor.Build.Revision //Show as many decimals as we need to for the version (ie: 2.0 instead of 2.0.0.0) this.Text += " v" + current.ToString(current.Revision != 0 ? 4 : current.Build != 0 ? 3 : 2); lblRequestCount.Visible = false; txtBxRequestCount.Visible = false; // Add items to Base URI combo box ClientState.BaseURI = "https://studyadmin-api-dev.actigraphcorp.com"; // defaults to dev txtBaseURI.Text = ClientState.BaseURI; // Populate HttpMethod Dropdown list and default it to "GET" request type cbHttpMethod.Items.Add(HttpMethod.Get); cbHttpMethod.Items.Add(HttpMethod.Post); cbHttpMethod.Items.Add(HttpMethod.Put); cbHttpMethod.SelectedIndex = 0; txtBxRequest.Enabled = false; // Populdate File Type Combo Box for Upload cmBxFileType.Items.Add("EPOCH"); cmBxFileType.SelectedIndex = 0; lblStatusCode.Text = string.Empty; btnSendRequest.Enabled = false; lblError.Text = string.Empty; lblAccessKeyRequired.Text = string.Empty; lblSecretKeyRequired.Text = string.Empty; lblError.Text = string.Empty; lblBaseURIRequired.Text = string.Empty; // Populate Built-In Tests Combo Box cBBuiltInTests.Items.Add("--------------- Subject Endpoints ---------------"); foreach (var i in BuiltInTestCaseRepo.Instance.SubjectTestCases) { cBBuiltInTests.Items.Add(i); } cBBuiltInTests.Items.Add("--------------- Site Endpoints ---------------"); foreach (var i in BuiltInTestCaseRepo.Instance.SiteTestCases) { cBBuiltInTests.Items.Add(i); } cBBuiltInTests.Items.Add("--------------- Study Endpoints ---------------"); foreach (var i in BuiltInTestCaseRepo.Instance.StudyTestCases) { cBBuiltInTests.Items.Add(i); } cBBuiltInTests.Items.Add("--------------- Upload Endpoints ---------------"); foreach (var i in BuiltInTestCaseRepo.Instance.UploadTestCases) { cBBuiltInTests.Items.Add(i); } cBBuiltInTests.Items.Add("--------------- WebHooks Endpoints ---------------"); foreach (var i in BuiltInTestCaseRepo.Instance.WebHooksTestCases) { cBBuiltInTests.Items.Add(i); } cBBuiltInTests.Items.Insert(0, ""); // Setting Help LInk linkLabelHelp.Click += (o, e) => { Process.Start("https://github.com/actigraph/StudyAdminAPIDocumentation"); }; // Set defaults for access and secret keys defaultAccessKeyText = "<Enter Access Key>"; txtBxAccessKey.Text = defaultAccessKeyText; txtBxAccessKey.MouseClick += (o, e) => { if (txtBxAccessKey.Text.Equals(defaultAccessKeyText)) { txtBxAccessKey.Text = string.Empty; } }; defaultSecretKeyText = "<Enter Secret Key>"; txtBxSecretKey.Text = defaultSecretKeyText; txtBxSecretKey.MouseClick += (o, e) => { if (txtBxSecretKey.Text.Equals(defaultSecretKeyText)) { txtBxSecretKey.Text = string.Empty; } }; cbHttpMethod.SelectedIndexChanged += (o, e) => { txtBxRequest.Enabled = true; if (((HttpMethod)cbHttpMethod.SelectedItem).Equals(HttpMethod.Get)) { txtBxRequest.Clear(); txtBxRequest.Enabled = false; } btnSendRequest.Enabled = this.ShouldSendRequestButtonBeEnabled; }; btnSelectActivityFile.Click += (o, e) => { using (var openFileDialog = new OpenFileDialog()) { DialogResult result = openFileDialog.ShowDialog(); if (!string.IsNullOrEmpty(openFileDialog.FileName)) { using (var fileStream = new System.IO.FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read)) { byte[] filebytes = new byte[fileStream.Length]; fileStream.Read(filebytes, 0, Convert.ToInt32(fileStream.Length)); APIBuiltInTestCase apiTest = ( from i in BuiltInTestCaseRepo.Instance.AllTestCases where i.Name.Equals(cBBuiltInTests.Text) select i).FirstOrDefault(); if (apiTest.GetType().Equals(typeof(PostUploadTest))) { PostUploadTest test = ((PostUploadTest)apiTest); base64String = Convert.ToBase64String(filebytes); // Put placeholder here test.SetDeviceData("<" + new FileInfo(openFileDialog.FileName).Name + ">"); test.SetFileType(cmBxFileType.SelectedItem.ToString()); btnPopualte.PerformClick(); } } } else { UpdateDeviceDataInRequestTextBoxForPostUpload(string.Empty); } } }; // btnPopulate click action for button btnPopualte.Click += (o, e) => { // clear response box when selecting new built in test lblStatusCode.Text = string.Empty; btnCompareResponse.Enabled = false; APIBuiltInTestCase apiTest = ( from i in BuiltInTestCaseRepo.Instance.AllTestCases where i.Name.Equals(cBBuiltInTests.Text) select i).FirstOrDefault(); if (apiTest != null) { txtBxURI.Text = apiTest.DefaultResourceURI; cbHttpMethod.SelectedItem = apiTest.HttpVerb; pnlActivityFile.Enabled = apiTest.AllowActivityFilePanal; if (((HttpMethod)cbHttpMethod.SelectedItem).Equals(HttpMethod.Get)) { btnSendRequest.Enabled = this.ShouldSendRequestButtonBeEnabled; txtBxRequest.Enabled = false; txtBxRequest.Clear(); } else { txtBxRequest.Enabled = true; txtBxRequest.Text = "Loading Request Content..."; txtBxRequest.Text = apiTest.GetJsonRequestText(); } } else { txtBxRequest.Clear(); } }; // Open Compare Response Form in Dialog Box btnCompareResponse.Click += (o, e) => { CompareResponse compareResponse = new CompareResponse(lastJsonResponse); compareResponse.ShowDialog(); }; txtBxAccessKey.TextChanged += (o, e) => { btnSendRequest.Enabled = this.ShouldSendRequestButtonBeEnabled; }; txtBxSecretKey.TextChanged += (o, e) => { btnSendRequest.Enabled = this.ShouldSendRequestButtonBeEnabled; }; txtBaseURI.TextChanged += (o, e) => { btnSendRequest.Enabled = this.ShouldSendRequestButtonBeEnabled; }; txtBxRequest.TextChanged += (o, e) => { btnSendRequest.Enabled = this.ShouldSendRequestButtonBeEnabled; }; txtBxURI.TextChanged += (o, e) => { btnSendRequest.Enabled = this.ShouldSendRequestButtonBeEnabled; }; int previousSplitterDisatnace = splitContainerRequest.SplitterDistance; splitContainerRequest.SplitterMoved += (o, e) => { if (grpBxResponse.Height <= 20) { splitContainerRequest.SplitterDistance = previousSplitterDisatnace; } else { previousSplitterDisatnace = splitContainerRequest.SplitterDistance; } }; rdBtnPerformMultipleReqTrue.CheckedChanged += (o, e) => { lblRequestCount.Visible = rdBtnPerformMultipleReqTrue.Checked; txtBxRequestCount.Visible = rdBtnPerformMultipleReqTrue.Checked; if (txtBxRequestCount.Visible && string.IsNullOrEmpty(txtBxRequestCount.Text)) { txtBxRequestCount.Text = "10000"; } }; // setting click action for execute button btnSendRequest.Click += async(o, e) => { // represents the number of request to make to single endpoint long totalRequestNumber = 1; // check for multiple requests lblError.Text = ""; if (rdBtnPerformMultipleReqTrue.Checked) { if (!long.TryParse(txtBxRequestCount.Text, out totalRequestNumber)) { lblError.Text = "Request count is invalid"; return; } multipleRequestsRunning = true; } for (int i = 0; i < totalRequestNumber; i++) { await SendRequest(i + 1, totalRequestNumber); } multipleRequestsRunning = false; // re-enable send request button after request is complete btnSendRequest.Enabled = this.ShouldSendRequestButtonBeEnabled; }; #region response right click menu toolStripMenuItemClearLog.Click += (obj, sender) => { txtBxResponse.Clear(); sbLog.Clear(); lblStatusCode.Text = string.Empty; lblError.Text = string.Empty; lblAccessKeyRequired.Text = string.Empty; lblSecretKeyRequired.Text = string.Empty; lblBaseURIRequired.Text = string.Empty; }; toolStripMenuItemSaveLog.Click += (obj, sender) => { using (var saveFileDialog = new SaveFileDialog()) { saveFileDialog.Filter = "TXT Files (*.txt)|*.txt"; saveFileDialog.Title = "Save to a text File"; var result = saveFileDialog.ShowDialog(); if (result != DialogResult.OK) { return; } using (StreamWriter s = new StreamWriter(saveFileDialog.FileName)) s.Write(txtBxResponse.Text); Process.Start(saveFileDialog.FileName); } }; #endregion response right click menu }