// testRequest tests an individual request, either HTTP or HTTPS, making sure // that the response status and body match the expected values. If the request // was successful, it also tests to make sure that the outbound request didn't // leak any Lantern or CloudFlare headers. func testRequest(testCase string, t *testing.T, requests chan *http.Request, https bool, certPool *x509.CertPool, expectedStatus int, expectedErr error) { cfg := &config.Config{} cfg.ApplyDefaults() trustedCAs, err := cfg.GetTrustedCACerts() if err != nil { t.Fatal(err) } fronted.Configure(trustedCAs, cfg.Client.MasqueradeSets) log.Debug("Making request") httpClient := &http.Client{Transport: &http.Transport{ Proxy: func(req *http.Request) (*url.URL, error) { return url.Parse("http://" + CLIENT_ADDR) }, TLSClientConfig: &tls.Config{ RootCAs: certPool, }, }} var destURL string if https { destURL = "https://" + HTTPS_ADDR } else { destURL = "http://" + HTTP_ADDR } req, err := http.NewRequest("GET", destURL, nil) if err != nil { t.Fatalf("Unable to construct request: %s", err) } resp, err := httpClient.Do(req) requestSuccessful := err == nil gotCorrectError := expectedErr == nil && err == nil || expectedErr != nil && err != nil && err.Error() == expectedErr.Error() if !gotCorrectError { t.Errorf("%s: Wrong error.\nExpected: %s\nGot : %s", testCase, expectedErr, err) } else if requestSuccessful { defer func() { if err := resp.Body.Close(); err != nil { t.Fatalf("Error closing response body: %s", err) } }() if resp.StatusCode != expectedStatus { t.Errorf("%s: Wrong response status. Expected %d, got %d", testCase, expectedStatus, resp.StatusCode) } else { // Check body body, err := ioutil.ReadAll(resp.Body) if err != nil { t.Errorf("%s: Unable to read response body: %s", testCase, err) } else if string(body) != EXPECTED_BODY { t.Errorf("%s: Body didn't contain expected text.\nExpected: %s\nGot : '%s'", testCase, EXPECTED_BODY, string(body)) } } } }
func applyClientConfig(client *client.Client, cfg *config.Config, proxyAll func() bool) { certs, err := cfg.GetTrustedCACerts() if err != nil { log.Errorf("Unable to get trusted ca certs, not configuring fronted: %s", err) } else { fronted.Configure(certs, cfg.Client.MasqueradeSets) } logging.Configure(client.Addr, cfg.CloudConfigCA, cfg.Client.DeviceID, Version, RevisionDate) // Update client configuration client.Configure(cfg.Client, proxyAll) }