github.com/coreos/goproxy@v0.0.0-20190513173959-f8dc2d7ba04e/examples/goproxy-jquery-version/jquery_test.go (about)

     1  package main
     2  
     3  import (
     4  	"bytes"
     5  	"io/ioutil"
     6  	"log"
     7  	"net/http"
     8  	"net/http/httptest"
     9  	"net/url"
    10  	"strings"
    11  	"testing"
    12  )
    13  
    14  func equal(u, v []string) bool {
    15  	if len(u) != len(v) {
    16  		return false
    17  	}
    18  	for i, _ := range u {
    19  		if u[i] != v[i] {
    20  			return false
    21  		}
    22  	}
    23  	return true
    24  }
    25  
    26  func readFile(fname string, t *testing.T) string {
    27  	b, err := ioutil.ReadFile(fname)
    28  	if err != nil {
    29  		t.Fatal("readFile", err)
    30  	}
    31  	return string(b)
    32  }
    33  
    34  func TestDefectiveScriptParser(t *testing.T) {
    35  	if l := len(findScriptSrc(`<!DOCTYPE HTML>
    36      <html>
    37      <body>
    38  
    39      <video width="320" height="240" controls="controls">
    40        <source src="movie.mp4" type="video/mp4" />
    41  	<source src="movie.ogg" type="video/ogg" />
    42  	  <source src="movie.webm" type="video/webm" />
    43  	  Your browser does not support the video tag.
    44  	  </video>
    45  
    46  	  </body>
    47  	  </html>`)); l != 0 {
    48  		t.Fail()
    49  	}
    50  	urls := findScriptSrc(readFile("w3schools.html", t))
    51  	if !equal(urls, []string{"http://partner.googleadservices.com/gampad/google_service.js",
    52  		"//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"}) {
    53  		t.Error("w3schools.html", "src scripts are not recognized", urls)
    54  	}
    55  	urls = findScriptSrc(readFile("jquery_homepage.html", t))
    56  	if !equal(urls, []string{"http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js",
    57  		"http://code.jquery.com/jquery-1.4.2.min.js",
    58  		"http://static.jquery.com/files/rocker/scripts/custom.js",
    59  		"http://static.jquery.com/donate/donate.js"}) {
    60  		t.Error("jquery_homepage.html", "src scripts are not recognized", urls)
    61  	}
    62  }
    63  
    64  func proxyWithLog() (*http.Client, *bytes.Buffer) {
    65  	proxy := NewJqueryVersionProxy()
    66  	proxyServer := httptest.NewServer(proxy)
    67  	buf := new(bytes.Buffer)
    68  	proxy.Logger = log.New(buf, "", 0)
    69  	proxyUrl, _ := url.Parse(proxyServer.URL)
    70  	tr := &http.Transport{Proxy: http.ProxyURL(proxyUrl)}
    71  	client := &http.Client{Transport: tr}
    72  	return client, buf
    73  }
    74  
    75  func get(t *testing.T, server *httptest.Server, client *http.Client, url string) {
    76  	resp, err := client.Get(server.URL + url)
    77  	if err != nil {
    78  		t.Fatal("cannot get proxy", err)
    79  	}
    80  	ioutil.ReadAll(resp.Body)
    81  	resp.Body.Close()
    82  }
    83  
    84  func TestProxyServiceTwoVersions(t *testing.T) {
    85  	var fs = httptest.NewServer(http.FileServer(http.Dir(".")))
    86  	defer fs.Close()
    87  
    88  	client, buf := proxyWithLog()
    89  
    90  	get(t, fs, client, "/w3schools.html")
    91  	get(t, fs, client, "/php_man.html")
    92  	if buf.String() != "" &&
    93  		!strings.Contains(buf.String(), " uses jquery ") {
    94  		t.Error("shouldn't warn on a single URL", buf.String())
    95  	}
    96  	get(t, fs, client, "/jquery1.html")
    97  	warnings := buf.String()
    98  	if !strings.Contains(warnings, "http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js") ||
    99  		!strings.Contains(warnings, "jquery.1.4.js") ||
   100  		!strings.Contains(warnings, "Contradicting") {
   101  		t.Error("contradicting jquery versions (php_man.html, w3schools.html) does not issue warning", warnings)
   102  	}
   103  }
   104  
   105  func TestProxyService(t *testing.T) {
   106  	var fs = httptest.NewServer(http.FileServer(http.Dir(".")))
   107  	defer fs.Close()
   108  
   109  	client, buf := proxyWithLog()
   110  
   111  	get(t, fs, client, "/jquery_homepage.html")
   112  	warnings := buf.String()
   113  	if !strings.Contains(warnings, "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js") ||
   114  		!strings.Contains(warnings, "http://code.jquery.com/jquery-1.4.2.min.js") ||
   115  		!strings.Contains(warnings, "Contradicting") {
   116  		t.Error("contradicting jquery versions does not issue warning")
   117  	}
   118  }