From d8e683ef0b15e00bba9c241181e7d3247d30539c Mon Sep 17 00:00:00 2001 From: Ruben Pollan Date: Thu, 22 Nov 2018 20:50:56 -0600 Subject: [test] make bonafide more testable Get local timezone and http client as configurable things in bonafide, so tests can set them. Also separate integration tests and unit tests. --- standalone/bonafide_test.go | 94 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 76 insertions(+), 18 deletions(-) (limited to 'standalone/bonafide_test.go') diff --git a/standalone/bonafide_test.go b/standalone/bonafide_test.go index 152b108..a659e46 100644 --- a/standalone/bonafide_test.go +++ b/standalone/bonafide_test.go @@ -1,42 +1,100 @@ +// Copyright (C) 2018 LEAP +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + package bitmask import ( - "bytes" + "io" + "io/ioutil" + "net/http" + "os" + "reflect" "testing" ) -var ( - privateKeyHeader = []byte("-----BEGIN RSA PRIVATE KEY-----") - certHeader = []byte("-----BEGIN CERTIFICATE-----") +const ( + certPath = "testdata/cert" + eipPath = "testdata/eip-service.json" ) +type client struct { + path string +} + +func (c client) Post(url, contentType string, body io.Reader) (resp *http.Response, err error) { + f, err := os.Open(c.path) + return &http.Response{ + Body: f, + StatusCode: 200, + }, err +} + func TestGetCert(t *testing.T) { - b := newBonafide() + b := bonafide{client: client{certPath}} cert, err := b.getCertPem() if err != nil { t.Fatal("getCert returned an error: ", err) } - if !bytes.Contains(cert, privateKeyHeader) { - t.Errorf("No private key present: \n%q", cert) + f, err := os.Open(certPath) + if err != nil { + t.Fatal("Can't open ", certPath, ": ", err) } + defer f.Close() - if !bytes.Contains(cert, certHeader) { - t.Errorf("No cert present: \n%q", cert) + certData, err := ioutil.ReadAll(f) + if err != nil { + t.Fatal("Can't read all: ", err) + } + if !reflect.DeepEqual(certData, cert) { + t.Errorf("cert doesn't match") } } -func TestGetGateways(t *testing.T) { - b := newBonafide() - gateways, err := b.getGateways() - if err != nil { - t.Fatal("getGateways returned an error: ", err) +func TestGatewayTzLocation(t *testing.T) { + // tzOffset -> location + values := map[int]string{ + -12: "c", + -10: "a", + -5: "a", + -3: "a", + -1: "b", + 0: "b", + 2: "b", + 5: "c", + 8: "c", + 12: "c", } - for _, gw := range gateways { - if gw.IPAddress == "5.79.86.180" { - return + for tzOffset, location := range values { + b := bonafide{ + client: client{eipPath}, + tzOffsetHours: tzOffset, + } + gateways, err := b.getGateways() + if err != nil { + t.Errorf("getGateways returned an error: %v", err) + continue + } + if len(gateways) < 4 { + t.Errorf("Wrong number of gateways: %d", len(gateways)) + continue + + } + if gateways[0].Location != location { + t.Errorf("Wrong location for tz %d: %s, expected: %s", tzOffset, gateways[0].Location, location) } } - t.Errorf("5.79.86.180 not in the list") } -- cgit v1.2.3