diff --git a/Gopkg.lock b/Gopkg.lock
new file mode 100644
index 00000000..51d35324
--- /dev/null
+++ b/Gopkg.lock
@@ -0,0 +1,200 @@
+# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
+
+
+[[projects]]
+ name = "github.com/adrianmo/go-nmea"
+ packages = ["."]
+ revision = "22095aa1b48050243d3eb9a001ca80eb91a0c6fa"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/bettercap/gatt"
+ packages = [
+ ".",
+ "linux",
+ "linux/cmd",
+ "linux/evt",
+ "linux/gioctl",
+ "linux/socket",
+ "linux/util",
+ "xpc"
+ ]
+ revision = "e65eb2df9116e5ec6e2409b6142a09a93e96b900"
+
+[[projects]]
+ name = "github.com/bettercap/readline"
+ packages = ["."]
+ revision = "62c6fe6193755f722b8b8788aa7357be55a50ff1"
+ version = "v1.4"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/chifflier/nfqueue-go"
+ packages = ["nfqueue"]
+ revision = "61ca646babef3bd4dea1deb610bfb0005c0a1298"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/dustin/go-humanize"
+ packages = ["."]
+ revision = "bb3d318650d48840a39aa21a027c6630e198e626"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/elazarl/goproxy"
+ packages = ["."]
+ revision = "a96fa3a318260eab29abaf32f7128c9eb07fb073"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/gobwas/glob"
+ packages = [
+ ".",
+ "compiler",
+ "match",
+ "syntax",
+ "syntax/ast",
+ "syntax/lexer",
+ "util/runes",
+ "util/strings"
+ ]
+ revision = "f00a7392b43971b2fdb562418faab1f18da2067a"
+
+[[projects]]
+ name = "github.com/google/go-github"
+ packages = ["github"]
+ revision = "e48060a28fac52d0f1cb758bc8b87c07bac4a87d"
+ version = "v15.0.0"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/google/go-querystring"
+ packages = ["query"]
+ revision = "53e6ce116135b80d037921a7fdd5138cf32d7a8a"
+
+[[projects]]
+ name = "github.com/google/gopacket"
+ packages = [
+ ".",
+ "layers",
+ "pcap",
+ "pcapgo"
+ ]
+ revision = "11c65f1ca9081dfea43b4f9643f5c155583b73ba"
+ version = "v1.1.14"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/gorilla/context"
+ packages = ["."]
+ revision = "08b5f424b9271eedf6f9f0ce86cb9396ed337a42"
+
+[[projects]]
+ name = "github.com/gorilla/mux"
+ packages = ["."]
+ revision = "53c1911da2b537f792e7cafcb446b05ffe33b996"
+ version = "v1.6.1"
+
+[[projects]]
+ name = "github.com/gorilla/websocket"
+ packages = ["."]
+ revision = "ea4d1f681babbce9545c9c5f3d5194a789c89f5b"
+ version = "v1.2.0"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/inconshreveable/go-vhost"
+ packages = ["."]
+ revision = "06d84117953b22058c096b49a429ebd4f3d3d97b"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/jpillora/go-tld"
+ packages = ["."]
+ revision = "a31ae10e978ab5f352c5dad2cfbd60546dcea75f"
+
+[[projects]]
+ name = "github.com/malfunkt/iprange"
+ packages = ["."]
+ revision = "3a31f5ed42d2d8a1fc46f1be91fd693bdef2dd52"
+ version = "v0.9.0"
+
+[[projects]]
+ name = "github.com/mattn/go-colorable"
+ packages = ["."]
+ revision = "5411d3eea5978e6cdc258b30de592b60df6aba96"
+
+[[projects]]
+ name = "github.com/mattn/go-isatty"
+ packages = ["."]
+ revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39"
+ version = "v0.0.3"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/mdlayher/dhcp6"
+ packages = [
+ ".",
+ "dhcp6opts",
+ "internal/buffer"
+ ]
+ revision = "e26af0688e455a82b14ebdbecf43f87ead3c4624"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/mgutz/ansi"
+ packages = ["."]
+ revision = "9520e82c474b0a04dd04f8a40959027271bab992"
+
+[[projects]]
+ name = "github.com/mgutz/logxi"
+ packages = ["v1"]
+ revision = "aebf8a7d67ab4625e0fd4a665766fef9a709161b"
+ version = "v1"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/pkg/errors"
+ packages = ["."]
+ revision = "816c9085562cd7ee03e7f8188a1cfd942858cded"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/robertkrimen/otto"
+ packages = [
+ ".",
+ "ast",
+ "dbg",
+ "file",
+ "parser",
+ "registry",
+ "token"
+ ]
+ revision = "6c383dd335ef8dcccef05e651ce1eccfe4d0f011"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/tarm/serial"
+ packages = ["."]
+ revision = "eaafced92e9619f03c72527efeab21e326f3bc36"
+
+[[projects]]
+ name = "golang.org/x/sys"
+ packages = ["unix"]
+ revision = "abf9c25f54453410d0c6668e519582a9e1115027"
+
+[[projects]]
+ name = "gopkg.in/sourcemap.v1"
+ packages = [
+ ".",
+ "base64vlq"
+ ]
+ revision = "6e83acea0053641eff084973fee085f0c193c61a"
+ version = "v1.0.5"
+
+[solve-meta]
+ analyzer-name = "dep"
+ analyzer-version = 1
+ inputs-digest = "16887d6924226ea7174b18c0c2a92da30997904da44648f7df6927b3ec8e8de1"
+ solver-name = "gps-cdcl"
+ solver-version = 1
diff --git a/Gopkg.toml b/Gopkg.toml
new file mode 100644
index 00000000..c6289dbd
--- /dev/null
+++ b/Gopkg.toml
@@ -0,0 +1,98 @@
+# Gopkg.toml example
+#
+# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html
+# for detailed Gopkg.toml documentation.
+#
+# required = ["github.com/user/thing/cmd/thing"]
+# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
+#
+# [[constraint]]
+# name = "github.com/user/project"
+# version = "1.0.0"
+#
+# [[constraint]]
+# name = "github.com/user/project2"
+# branch = "dev"
+# source = "github.com/myfork/project2"
+#
+# [[override]]
+# name = "github.com/x/y"
+# version = "2.4.0"
+#
+# [prune]
+# non-go = false
+# go-tests = true
+# unused-packages = true
+
+
+[[constraint]]
+ branch = "master"
+ name = "github.com/bettercap/gatt"
+
+[[constraint]]
+ name = "github.com/bettercap/readline"
+ version = "1.4.0"
+
+[[constraint]]
+ branch = "master"
+ name = "github.com/chifflier/nfqueue-go"
+
+[[constraint]]
+ branch = "master"
+ name = "github.com/dustin/go-humanize"
+
+[[constraint]]
+ branch = "master"
+ name = "github.com/elazarl/goproxy"
+
+[[constraint]]
+ branch = "master"
+ name = "github.com/gobwas/glob"
+
+[[constraint]]
+ name = "github.com/google/go-github"
+ version = "15.0.0"
+
+[[constraint]]
+ name = "github.com/google/gopacket"
+ version = "1.1.14"
+
+[[constraint]]
+ name = "github.com/gorilla/mux"
+ version = "1.6.1"
+
+[[constraint]]
+ name = "github.com/gorilla/websocket"
+ version = "1.2.0"
+
+[[constraint]]
+ branch = "master"
+ name = "github.com/inconshreveable/go-vhost"
+
+[[constraint]]
+ branch = "master"
+ name = "github.com/jpillora/go-tld"
+
+[[constraint]]
+ name = "github.com/malfunkt/iprange"
+ version = "0.9.0"
+
+[[constraint]]
+ name = "github.com/mattn/go-isatty"
+ version = "0.0.3"
+
+[[constraint]]
+ branch = "master"
+ name = "github.com/mdlayher/dhcp6"
+
+[[constraint]]
+ branch = "master"
+ name = "github.com/robertkrimen/otto"
+
+[[constraint]]
+ branch = "master"
+ name = "github.com/tarm/serial"
+
+[prune]
+ go-tests = true
+ unused-packages = true
diff --git a/glide.lock b/glide.lock
deleted file mode 100644
index d4d60054..00000000
--- a/glide.lock
+++ /dev/null
@@ -1,101 +0,0 @@
-hash: 8c75fb42328bdf49846d94b20ffdca1271647dac675a481d9e2c090c2fcadf95
-updated: 2018-04-17T18:24:27.044155505+02:00
-imports:
-- name: github.com/adrianmo/go-nmea
- version: 22095aa1b48050243d3eb9a001ca80eb91a0c6fa
- vcs: git
-- name: github.com/bettercap/gatt
- version: e65eb2df9116e5ec6e2409b6142a09a93e96b900
- vcs: git
- subpackages:
- - linux
- - linux/cmd
- - linux/evt
- - linux/gioctl
- - linux/socket
- - linux/util
- - xpc
-- name: github.com/bettercap/readline
- version: 62c6fe6193755f722b8b8788aa7357be55a50ff1
-- name: github.com/chifflier/nfqueue-go
- version: 61ca646babef3bd4dea1deb610bfb0005c0a1298
- subpackages:
- - nfqueue
-- name: github.com/dustin/go-humanize
- version: bb3d318650d48840a39aa21a027c6630e198e626
-- name: github.com/elazarl/goproxy
- version: a96fa3a318260eab29abaf32f7128c9eb07fb073
- vcs: git
-- name: github.com/gobwas/glob
- version: f00a7392b43971b2fdb562418faab1f18da2067a
- subpackages:
- - compiler
- - match
- - syntax
- - syntax/ast
- - syntax/lexer
- - util/runes
- - util/strings
-- name: github.com/google/go-github
- version: e48060a28fac52d0f1cb758bc8b87c07bac4a87d
- subpackages:
- - github
-- name: github.com/google/go-querystring
- version: 53e6ce116135b80d037921a7fdd5138cf32d7a8a
- subpackages:
- - query
-- name: github.com/google/gopacket
- version: 11c65f1ca9081dfea43b4f9643f5c155583b73ba
- subpackages:
- - layers
- - pcap
- - pcapgo
-- name: github.com/gorilla/context
- version: 08b5f424b9271eedf6f9f0ce86cb9396ed337a42
-- name: github.com/gorilla/mux
- version: 53c1911da2b537f792e7cafcb446b05ffe33b996
-- name: github.com/gorilla/websocket
- version: ea4d1f681babbce9545c9c5f3d5194a789c89f5b
-- name: github.com/inconshreveable/go-vhost
- version: 06d84117953b22058c096b49a429ebd4f3d3d97b
-- name: github.com/jpillora/go-tld
- version: a31ae10e978ab5f352c5dad2cfbd60546dcea75f
-- name: github.com/malfunkt/iprange
- version: 3a31f5ed42d2d8a1fc46f1be91fd693bdef2dd52
-- name: github.com/mattn/go-colorable
- version: 5411d3eea5978e6cdc258b30de592b60df6aba96
-- name: github.com/mattn/go-isatty
- version: 0360b2af4f38e8d38c7fce2a9f4e702702d73a39
-- name: github.com/mdlayher/dhcp6
- version: e26af0688e455a82b14ebdbecf43f87ead3c4624
- subpackages:
- - dhcp6opts
- - internal/buffer
-- name: github.com/mgutz/ansi
- version: 9520e82c474b0a04dd04f8a40959027271bab992
-- name: github.com/mgutz/logxi
- version: aebf8a7d67ab4625e0fd4a665766fef9a709161b
- subpackages:
- - v1
-- name: github.com/pkg/errors
- version: 816c9085562cd7ee03e7f8188a1cfd942858cded
-- name: github.com/robertkrimen/otto
- version: 6c383dd335ef8dcccef05e651ce1eccfe4d0f011
- subpackages:
- - ast
- - dbg
- - file
- - parser
- - registry
- - token
-- name: github.com/tarm/serial
- version: eaafced92e9619f03c72527efeab21e326f3bc36
-- name: golang.org/x/sys
- version: abf9c25f54453410d0c6668e519582a9e1115027
- subpackages:
- - unix
-- name: gopkg.in/sourcemap.v1
- version: 6e83acea0053641eff084973fee085f0c193c61a
- subpackages:
- - base64vlq
-testImports: []
diff --git a/glide.yaml b/glide.yaml
deleted file mode 100644
index ceb76e68..00000000
--- a/glide.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-package: github.com/bettercap/bettercap
-import:
-- package: github.com/adrianmo/go-nmea
- vcs: git
- version: 22095aa1b48050243d3eb9a001ca80eb91a0c6fa
-- package: github.com/bettercap/gatt
- vcs: git
- version: e65eb2df9116e5ec6e2409b6142a09a93e96b900
- subpackages:
- - linux/cmd
-- package: github.com/bettercap/readline
- version: ^1.4.0
-- package: github.com/dustin/go-humanize
-- package: github.com/elazarl/goproxy
- vcs: git
- version: a96fa3a318260eab29abaf32f7128c9eb07fb073
-- package: github.com/google/go-github
- version: ^15.0.0
- subpackages:
- - github
-- package: github.com/google/gopacket
- version: ^1.1.14
- subpackages:
- - layers
- - pcap
- - pcapgo
-- package: github.com/gorilla/mux
- version: ^1.6.1
-- package: github.com/gorilla/websocket
- version: ^1.2.0
-- package: github.com/inconshreveable/go-vhost
-- package: github.com/jpillora/go-tld
-- package: github.com/malfunkt/iprange
- version: ^0.9.0
-- package: github.com/mattn/go-isatty
- version: ^0.0.3
-- package: github.com/mdlayher/dhcp6
- subpackages:
- - dhcp6opts
-- package: github.com/robertkrimen/otto
-- package: github.com/tarm/serial
diff --git a/vendor/github.com/adrianmo/go-nmea/glgsv_test.go b/vendor/github.com/adrianmo/go-nmea/glgsv_test.go
deleted file mode 100644
index ca5f83c8..00000000
--- a/vendor/github.com/adrianmo/go-nmea/glgsv_test.go
+++ /dev/null
@@ -1,96 +0,0 @@
-package nmea
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestGLGSVGoodSentence(t *testing.T) {
- goodMsg := "$GLGSV,3,1,11,03,03,111,00,04,15,270,00,06,01,010,12,13,06,292,00*6B"
- s, err := Parse(goodMsg)
-
- assert.NoError(t, err, "Unexpected error parsing good sentence")
- assert.Equal(t, PrefixGLGSV, s.Prefix(), "Prefix does not match")
-
- sentence := s.(GLGSV)
- assert.Equal(t, int64(3), sentence.TotalMessages, "Total messages does not match")
- assert.Equal(t, int64(1), sentence.MessageNumber, "Message number does not match")
- assert.Equal(t, int64(11), sentence.NumberSVsInView, "Number of SVs in view does not match")
-
- assert.Equal(t, int64(3), sentence.Info[0].SVPRNNumber, "Number of Info[0] SV PRN does not match")
- assert.Equal(t, int64(3), sentence.Info[0].Elevation, "Number of Info[0] Elevation does not match")
- assert.Equal(t, int64(111), sentence.Info[0].Azimuth, "Number of Info[0] Azimuth does not match")
- assert.Equal(t, int64(0), sentence.Info[0].SNR, "Number of Info[0] SNR does not match")
-
- assert.Equal(t, int64(4), sentence.Info[1].SVPRNNumber, "Number of Info[1] SV PRN does not match")
- assert.Equal(t, int64(15), sentence.Info[1].Elevation, "Number of Info[1] Elevation does not match")
- assert.Equal(t, int64(270), sentence.Info[1].Azimuth, "Number of Info[1] Azimuth does not match")
- assert.Equal(t, int64(0), sentence.Info[1].SNR, "Number of Info[1] SNR does not match")
-
- assert.Equal(t, int64(6), sentence.Info[2].SVPRNNumber, "Number of Info[2] SV PRN does not match")
- assert.Equal(t, int64(1), sentence.Info[2].Elevation, "Number of Info[2] Elevation does not match")
- assert.Equal(t, int64(10), sentence.Info[2].Azimuth, "Number of Info[2] Azimuth does not match")
- assert.Equal(t, int64(12), sentence.Info[2].SNR, "Number of Info[2] SNR does not match")
-
- assert.Equal(t, int64(13), sentence.Info[3].SVPRNNumber, "Number of Info[3] SV PRN does not match")
- assert.Equal(t, int64(6), sentence.Info[3].Elevation, "Number of Info[3] Elevation does not match")
- assert.Equal(t, int64(292), sentence.Info[3].Azimuth, "Number of Info[3] Azimuth does not match")
- assert.Equal(t, int64(0), sentence.Info[3].SNR, "Number of Info[3] SNR does not match")
-}
-
-func TestGLGSVShort(t *testing.T) {
- goodMsg := "$GLGSV,3,1,11,03,03,111,00,04,15,270,00,06,01,010,12*56"
- s, err := Parse(goodMsg)
-
- assert.NoError(t, err, "Unexpected error parsing good sentence")
- assert.Equal(t, PrefixGLGSV, s.Prefix(), "Prefix does not match")
-
- sentence := s.(GLGSV)
- assert.Equal(t, int64(3), sentence.TotalMessages, "Total messages does not match")
- assert.Equal(t, int64(1), sentence.MessageNumber, "Message number does not match")
- assert.Equal(t, int64(11), sentence.NumberSVsInView, "Number of SVs in view does not match")
-
- assert.Equal(t, int64(3), sentence.Info[0].SVPRNNumber, "Number of Info[0] SV PRN does not match")
- assert.Equal(t, int64(3), sentence.Info[0].Elevation, "Number of Info[0] Elevation does not match")
- assert.Equal(t, int64(111), sentence.Info[0].Azimuth, "Number of Info[0] Azimuth does not match")
- assert.Equal(t, int64(0), sentence.Info[0].SNR, "Number of Info[0] SNR does not match")
-
- assert.Equal(t, int64(4), sentence.Info[1].SVPRNNumber, "Number of Info[1] SV PRN does not match")
- assert.Equal(t, int64(15), sentence.Info[1].Elevation, "Number of Info[1] Elevation does not match")
- assert.Equal(t, int64(270), sentence.Info[1].Azimuth, "Number of Info[1] Azimuth does not match")
- assert.Equal(t, int64(0), sentence.Info[1].SNR, "Number of Info[1] SNR does not match")
-
- assert.Equal(t, int64(6), sentence.Info[2].SVPRNNumber, "Number of Info[2] SV PRN does not match")
- assert.Equal(t, int64(1), sentence.Info[2].Elevation, "Number of Info[2] Elevation does not match")
- assert.Equal(t, int64(10), sentence.Info[2].Azimuth, "Number of Info[2] Azimuth does not match")
- assert.Equal(t, int64(12), sentence.Info[2].SNR, "Number of Info[2] SNR does not match")
-}
-func TestGLGSVBadSentence(t *testing.T) {
- tests := []struct {
- Input string
- Error string
- }{
- {"$GLGSV,3,1,11.2,03,03,111,00,04,15,270,00,06,01,010,12,13,06,292,00*77", "nmea: GLGSV invalid number of SVs in view: 11.2"},
- {"$GLGSV,A3,1,11,03,03,111,00,04,15,270,00,06,01,010,12,13,06,292,00*2A", "nmea: GLGSV invalid total number of messages: A3"},
- {"$GLGSV,3,A1,11,03,03,111,00,04,15,270,00,06,01,010,12,13,06,292,00*2A", "nmea: GLGSV invalid message number: A1"},
- {"$GLGSV,3,1,11,A03,03,111,00,04,15,270,00,06,01,010,12,13,06,292,00*2A", "nmea: GLGSV invalid SV prn number: A03"},
- {"$GLGSV,3,1,11,03,A03,111,00,04,15,270,00,06,01,010,12,13,06,292,00*2A", "nmea: GLGSV invalid elevation: A03"},
- {"$GLGSV,3,1,11,03,03,A111,00,04,15,270,00,06,01,010,12,13,06,292,00*2A", "nmea: GLGSV invalid azimuth: A111"},
- {"$GLGSV,3,1,11,03,03,111,A00,04,15,270,00,06,01,010,12,13,06,292,00*2A", "nmea: GLGSV invalid SNR: A00"},
- }
- for _, tc := range tests {
- _, err := Parse(tc.Input)
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, tc.Error, err.Error(), "Incorrect error message")
- }
-
-}
-
-func TestGLGSVWrongSentence(t *testing.T) {
- wrongMsg := "$GPXTE,A,A,4.07,L,N*6D"
- sent, _ := ParseSentence(wrongMsg)
- _, err := NewGLGSV(sent)
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: GLGSV invalid prefix: GPXTE", err.Error(), "Incorrect error message")
-}
diff --git a/vendor/github.com/adrianmo/go-nmea/gngga_test.go b/vendor/github.com/adrianmo/go-nmea/gngga_test.go
deleted file mode 100644
index e8941233..00000000
--- a/vendor/github.com/adrianmo/go-nmea/gngga_test.go
+++ /dev/null
@@ -1,71 +0,0 @@
-package nmea
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestGNGGAGoodSentence(t *testing.T) {
- goodMsg := "$GNGGA,203415.000,6325.6138,N,01021.4290,E,1,8,2.42,72.5,M,41.5,M,,*7C"
- sentence, err := Parse(goodMsg)
-
- assert.NoError(t, err, "Unexpected error parsing good sentence")
-
- lat, _ := ParseLatLong("6325.6138 N")
- lon, _ := ParseLatLong("01021.4290 E")
- // Attributes of the parsed sentence, and their expected values.
- expected := GNGGA{
- Sent: Sent{
- Type: "GNGGA",
- Fields: []string{"203415.000", "6325.6138", "N", "01021.4290", "E", "1", "8", "2.42", "72.5", "M", "41.5", "M", "", ""},
- Checksum: "7C",
- Raw: "$GNGGA,203415.000,6325.6138,N,01021.4290,E,1,8,2.42,72.5,M,41.5,M,,*7C",
- },
- Time: Time{true, 20, 34, 15, 0},
- Latitude: lat,
- Longitude: lon,
- FixQuality: GPS,
- NumSatellites: 8,
- HDOP: 2.42,
- Altitude: 72.5,
- Separation: 41.5,
- DGPSAge: "",
- DGPSId: "",
- }
-
- assert.EqualValues(t, expected, sentence, "Sentence values do not match")
-}
-
-func TestGNGGABadType(t *testing.T) {
- badType := "$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*70"
- s, err := Parse(badType)
-
- assert.NoError(t, err, "Unexpected error parsing sentence")
- assert.NotEqual(t, "GNGGA", s.Prefix(), "Unexpected sentence type")
-}
-
-func TestGNGGABadLatitude(t *testing.T) {
- badLat := "$GNGGA,034225.077,A,S,15124.5567,E,1,03,9.7,-25.0,M,21.0,M,,0000*24"
- _, err := Parse(badLat)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: GNGGA invalid latitude: cannot parse [A S], unknown format", err.Error(), "Error message does not match")
-}
-
-func TestGNGGABadLongitude(t *testing.T) {
- badLon := "$GNGGA,034225.077,3356.4650,S,A,E,1,03,9.7,-25.0,M,21.0,M,,0000*12"
- _, err := Parse(badLon)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: GNGGA invalid longitude: cannot parse [A E], unknown format", err.Error(), "Error message does not match")
-}
-
-func TestGNGGABadFixQuality(t *testing.T) {
- // Make sure bad fix mode is detected.
- badMode := "$GNGGA,034225.077,3356.4650,S,15124.5567,E,5,03,9.7,-25.0,M,21.0,M,,0000*4B"
- _, err := Parse(badMode)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, err.Error(), "nmea: GNGGA invalid fix quality: 5", "Error message not as expected")
-}
diff --git a/vendor/github.com/adrianmo/go-nmea/gnrmc_test.go b/vendor/github.com/adrianmo/go-nmea/gnrmc_test.go
deleted file mode 100644
index ab56245d..00000000
--- a/vendor/github.com/adrianmo/go-nmea/gnrmc_test.go
+++ /dev/null
@@ -1,78 +0,0 @@
-package nmea
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-var gnrmctests = []struct {
- Input string
- Output GNRMC
-}{
- {
- "$GNRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*6E",
- GNRMC{
- Time: Time{true, 22, 05, 16, 0},
- Validity: "A",
- Speed: 173.8,
- Course: 231.8,
- Date: Date{true, 13, 06, 94},
- Variation: -4.2,
- Latitude: MustParseGPS("5133.82 N"),
- Longitude: MustParseGPS("00042.24 W"),
- },
- },
- {
- "$GNRMC,142754.0,A,4302.539570,N,07920.379823,W,0.0,,070617,0.0,E,A*21",
- GNRMC{
- Time: Time{true, 14, 27, 54, 0},
- Validity: "A",
- Speed: 0,
- Course: 0,
- Date: Date{true, 7, 6, 17},
- Variation: 0,
- Latitude: MustParseGPS("4302.539570 N"),
- Longitude: MustParseGPS("07920.379823 W"),
- },
- },
-}
-
-func TestGNRMCGoodSentence(t *testing.T) {
-
- for _, tt := range gnrmctests {
-
- s, err := Parse(tt.Input)
-
- assert.NoError(t, err, "Unexpected error parsing good sentence")
- assert.Equal(t, PrefixGNRMC, s.Prefix(), "Prefix does not match")
-
- sentence := s.(GNRMC)
-
- assert.Equal(t, tt.Output.Time, sentence.Time, "Time does not match")
- assert.Equal(t, tt.Output.Validity, sentence.Validity, "Status does not match")
- assert.Equal(t, tt.Output.Speed, sentence.Speed, "Speed does not match")
- assert.Equal(t, tt.Output.Course, sentence.Course, "Course does not match")
- assert.Equal(t, tt.Output.Date, sentence.Date, "Date does not match")
- assert.Equal(t, tt.Output.Variation, sentence.Variation, "Variation does not match")
- assert.Equal(t, tt.Output.Latitude, sentence.Latitude, "Latitude does not match")
- assert.Equal(t, tt.Output.Longitude, sentence.Longitude, "Longitude does not match")
- }
-
-}
-
-func TestGNRMCBadSentence(t *testing.T) {
- badMsg := "$GNRMC,220516,D,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*6B"
- _, err := Parse(badMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: GNRMC invalid validity: D", err.Error(), "Incorrect error message")
-}
-
-func TestGNRMCWrongSentence(t *testing.T) {
- wrongMsg := "$GPXTE,A,A,4.07,L,N*6D"
- _, err := Parse(wrongMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: sentence type 'GPXTE' not implemented", err.Error(), "Incorrect error message")
-}
diff --git a/vendor/github.com/adrianmo/go-nmea/gpgga_test.go b/vendor/github.com/adrianmo/go-nmea/gpgga_test.go
deleted file mode 100644
index 1db5aeb8..00000000
--- a/vendor/github.com/adrianmo/go-nmea/gpgga_test.go
+++ /dev/null
@@ -1,71 +0,0 @@
-package nmea
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestGPGGAGoodSentence(t *testing.T) {
- goodMsg := "$GPGGA,034225.077,3356.4650,S,15124.5567,E,1,03,9.7,-25.0,M,21.0,M,,0000*51"
- sentence, err := Parse(goodMsg)
-
- assert.NoError(t, err, "Unexpected error parsing good sentence")
-
- lat, _ := ParseLatLong("3356.4650 S")
- lon, _ := ParseLatLong("15124.5567 E")
- // Attributes of the parsed sentence, and their expected values.
- expected := GPGGA{
- Sent: Sent{
- Type: "GPGGA",
- Fields: []string{"034225.077", "3356.4650", "S", "15124.5567", "E", "1", "03", "9.7", "-25.0", "M", "21.0", "M", "", "0000"},
- Checksum: "51",
- Raw: "$GPGGA,034225.077,3356.4650,S,15124.5567,E,1,03,9.7,-25.0,M,21.0,M,,0000*51",
- },
- Time: Time{true, 3, 42, 25, 77},
- Latitude: lat,
- Longitude: lon,
- FixQuality: GPS,
- NumSatellites: 03,
- HDOP: 9.7,
- Altitude: -25.0,
- Separation: 21.0,
- DGPSAge: "",
- DGPSId: "0000",
- }
-
- assert.EqualValues(t, expected, sentence, "Sentence values do not match")
-}
-
-func TestGPGGABadType(t *testing.T) {
- badType := "$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*70"
- s, err := Parse(badType)
-
- assert.NoError(t, err, "Unexpected error parsing sentence")
- assert.NotEqual(t, "GPGGA", s.Prefix(), "Unexpected sentence type")
-}
-
-func TestGPGGABadLatitude(t *testing.T) {
- badLat := "$GPGGA,034225.077,A,S,15124.5567,E,1,03,9.7,-25.0,M,21.0,M,,0000*3A"
- _, err := Parse(badLat)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: GPGGA invalid latitude: cannot parse [A S], unknown format", err.Error(), "Error message does not match")
-}
-
-func TestGPGGABadLongitude(t *testing.T) {
- badLon := "$GPGGA,034225.077,3356.4650,S,A,E,1,03,9.7,-25.0,M,21.0,M,,0000*0C"
- _, err := Parse(badLon)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: GPGGA invalid longitude: cannot parse [A E], unknown format", err.Error(), "Error message does not match")
-}
-
-func TestGPGGABadFixQuality(t *testing.T) {
- // Make sure bad fix mode is detected.
- badMode := "$GPGGA,034225.077,3356.4650,S,15124.5567,E,5,03,9.7,-25.0,M,21.0,M,,0000*55"
- _, err := Parse(badMode)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, err.Error(), "nmea: GPGGA invalid fix quality: 5", "Error message not as expected")
-}
diff --git a/vendor/github.com/adrianmo/go-nmea/gpgll_test.go b/vendor/github.com/adrianmo/go-nmea/gpgll_test.go
deleted file mode 100644
index a39c8c0a..00000000
--- a/vendor/github.com/adrianmo/go-nmea/gpgll_test.go
+++ /dev/null
@@ -1,38 +0,0 @@
-package nmea
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestGPGLLGoodSentence(t *testing.T) {
- goodMsg := "$GPGLL,3926.7952,N,12000.5947,W,022732,A,A*58"
- s, err := Parse(goodMsg)
-
- assert.NoError(t, err, "Unexpected error parsing good sentence")
- assert.Equal(t, PrefixGPGLL, s.Prefix(), "Prefix does not match")
-
- sentence := s.(GPGLL)
-
- assert.Equal(t, "3926.7952", sentence.Latitude.PrintGPS(), "Latitude does not match")
- assert.Equal(t, "12000.5947", sentence.Longitude.PrintGPS(), "Longitude does not match")
- assert.Equal(t, Time{true, 2, 27, 32, 0}, sentence.Time, "Time does not match")
- assert.Equal(t, "A", sentence.Validity, "Status does not match")
-}
-
-func TestGPGLLBadSentence(t *testing.T) {
- badMsg := "$GPGLL,3926.7952,N,12000.5947,W,022732,D,A*5D"
- _, err := Parse(badMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: GPGLL invalid validity: D", err.Error(), "Incorrect error message")
-}
-
-func TestGPGLLWrongSentence(t *testing.T) {
- wrongMsg := "$GPXTE,A,A,4.07,L,N*6D"
- _, err := Parse(wrongMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: sentence type 'GPXTE' not implemented", err.Error(), "Incorrect error message")
-}
diff --git a/vendor/github.com/adrianmo/go-nmea/gpgsa_test.go b/vendor/github.com/adrianmo/go-nmea/gpgsa_test.go
deleted file mode 100644
index ae1e9aa8..00000000
--- a/vendor/github.com/adrianmo/go-nmea/gpgsa_test.go
+++ /dev/null
@@ -1,50 +0,0 @@
-package nmea
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestGPGSAGoodSentence(t *testing.T) {
- goodMsg := "$GPGSA,A,3,22,19,18,27,14,03,,,,,,,3.1,2.0,2.4*36"
- sentence, err := Parse(goodMsg)
-
- assert.NoError(t, err, "Unexpected error parsing good sentence")
-
- // Attributes of the parsed sentence, and their expected values.
- expected := GPGSA{
- Sent: Sent{
- Type: "GPGSA",
- Fields: []string{"A", "3", "22", "19", "18", "27", "14", "03", "", "", "", "", "", "", "3.1", "2.0", "2.4"},
- Checksum: "36",
- Raw: "$GPGSA,A,3,22,19,18,27,14,03,,,,,,,3.1,2.0,2.4*36",
- },
- Mode: Auto,
- FixType: Fix3D,
- PDOP: 3.1,
- HDOP: 2.0,
- VDOP: 2.4,
- SV: []string{"22", "19", "18", "27", "14", "03"},
- }
-
- assert.EqualValues(t, expected, sentence, "Sentence values do not match")
-}
-
-func TestGPGSABadMode(t *testing.T) {
- // Make sure bad fix mode is detected.
- badMode := "$GPGSA,F,3,22,19,18,27,14,03,,,,,,,3.1,2.0,2.4*31"
- _, err := Parse(badMode)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: GPGSA invalid selection mode: F", err.Error(), "Error message does not match")
-}
-
-func TestGPGSABadFix(t *testing.T) {
- // Make sure bad fix type is detected.
- badFixType := "$GPGSA,A,6,22,19,18,27,14,03,,,,,,,3.1,2.0,2.4*33"
- _, err := Parse(badFixType)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: GPGSA invalid fix type: 6", err.Error(), "Error message does not match")
-}
diff --git a/vendor/github.com/adrianmo/go-nmea/gpgsv_test.go b/vendor/github.com/adrianmo/go-nmea/gpgsv_test.go
deleted file mode 100644
index bf93b94c..00000000
--- a/vendor/github.com/adrianmo/go-nmea/gpgsv_test.go
+++ /dev/null
@@ -1,96 +0,0 @@
-package nmea
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestGPGSVGoodSentence(t *testing.T) {
- goodMsg := "$GPGSV,3,1,11,03,03,111,00,04,15,270,00,06,01,010,12,13,06,292,00*77"
- s, err := Parse(goodMsg)
-
- assert.NoError(t, err, "Unexpected error parsing good sentence")
- assert.Equal(t, PrefixGPGSV, s.Prefix(), "Prefix does not match")
-
- sentence := s.(GPGSV)
- assert.Equal(t, int64(3), sentence.TotalMessages, "Total messages does not match")
- assert.Equal(t, int64(1), sentence.MessageNumber, "Message number does not match")
- assert.Equal(t, int64(11), sentence.NumberSVsInView, "Number of SVs in view does not match")
-
- assert.Equal(t, int64(3), sentence.Info[0].SVPRNNumber, "Number of Info[0] SV PRN does not match")
- assert.Equal(t, int64(3), sentence.Info[0].Elevation, "Number of Info[0] Elevation does not match")
- assert.Equal(t, int64(111), sentence.Info[0].Azimuth, "Number of Info[0] Azimuth does not match")
- assert.Equal(t, int64(0), sentence.Info[0].SNR, "Number of Info[0] SNR does not match")
-
- assert.Equal(t, int64(4), sentence.Info[1].SVPRNNumber, "Number of Info[1] SV PRN does not match")
- assert.Equal(t, int64(15), sentence.Info[1].Elevation, "Number of Info[1] Elevation does not match")
- assert.Equal(t, int64(270), sentence.Info[1].Azimuth, "Number of Info[1] Azimuth does not match")
- assert.Equal(t, int64(0), sentence.Info[1].SNR, "Number of Info[1] SNR does not match")
-
- assert.Equal(t, int64(6), sentence.Info[2].SVPRNNumber, "Number of Info[2] SV PRN does not match")
- assert.Equal(t, int64(1), sentence.Info[2].Elevation, "Number of Info[2] Elevation does not match")
- assert.Equal(t, int64(10), sentence.Info[2].Azimuth, "Number of Info[2] Azimuth does not match")
- assert.Equal(t, int64(12), sentence.Info[2].SNR, "Number of Info[2] SNR does not match")
-
- assert.Equal(t, int64(13), sentence.Info[3].SVPRNNumber, "Number of Info[3] SV PRN does not match")
- assert.Equal(t, int64(6), sentence.Info[3].Elevation, "Number of Info[3] Elevation does not match")
- assert.Equal(t, int64(292), sentence.Info[3].Azimuth, "Number of Info[3] Azimuth does not match")
- assert.Equal(t, int64(0), sentence.Info[3].SNR, "Number of Info[3] SNR does not match")
-}
-
-func TestGPGSVShort(t *testing.T) {
- goodMsg := "$GPGSV,3,1,11,03,03,111,00,04,15,270,00,06,01,010,12*4A"
- s, err := Parse(goodMsg)
-
- assert.NoError(t, err, "Unexpected error parsing good sentence")
- assert.Equal(t, PrefixGPGSV, s.Prefix(), "Prefix does not match")
-
- sentence := s.(GPGSV)
- assert.Equal(t, int64(3), sentence.TotalMessages, "Total messages does not match")
- assert.Equal(t, int64(1), sentence.MessageNumber, "Message number does not match")
- assert.Equal(t, int64(11), sentence.NumberSVsInView, "Number of SVs in view does not match")
-
- assert.Equal(t, int64(3), sentence.Info[0].SVPRNNumber, "Number of Info[0] SV PRN does not match")
- assert.Equal(t, int64(3), sentence.Info[0].Elevation, "Number of Info[0] Elevation does not match")
- assert.Equal(t, int64(111), sentence.Info[0].Azimuth, "Number of Info[0] Azimuth does not match")
- assert.Equal(t, int64(0), sentence.Info[0].SNR, "Number of Info[0] SNR does not match")
-
- assert.Equal(t, int64(4), sentence.Info[1].SVPRNNumber, "Number of Info[1] SV PRN does not match")
- assert.Equal(t, int64(15), sentence.Info[1].Elevation, "Number of Info[1] Elevation does not match")
- assert.Equal(t, int64(270), sentence.Info[1].Azimuth, "Number of Info[1] Azimuth does not match")
- assert.Equal(t, int64(0), sentence.Info[1].SNR, "Number of Info[1] SNR does not match")
-
- assert.Equal(t, int64(6), sentence.Info[2].SVPRNNumber, "Number of Info[2] SV PRN does not match")
- assert.Equal(t, int64(1), sentence.Info[2].Elevation, "Number of Info[2] Elevation does not match")
- assert.Equal(t, int64(10), sentence.Info[2].Azimuth, "Number of Info[2] Azimuth does not match")
- assert.Equal(t, int64(12), sentence.Info[2].SNR, "Number of Info[2] SNR does not match")
-}
-func TestGPGSVBadSentence(t *testing.T) {
- tests := []struct {
- Input string
- Error string
- }{
- {"$GPGSV,3,1,11.2,03,03,111,00,04,15,270,00,06,01,010,12,13,06,292,00*6b", "nmea: GPGSV invalid number of SVs in view: 11.2"},
- {"$GPGSV,A3,1,11,03,03,111,00,04,15,270,00,06,01,010,12,13,06,292,00*36", "nmea: GPGSV invalid total number of messages: A3"},
- {"$GPGSV,3,A1,11,03,03,111,00,04,15,270,00,06,01,010,12,13,06,292,00*36", "nmea: GPGSV invalid message number: A1"},
- {"$GPGSV,3,1,11,A03,03,111,00,04,15,270,00,06,01,010,12,13,06,292,00*36", "nmea: GPGSV invalid SV prn number: A03"},
- {"$GPGSV,3,1,11,03,A03,111,00,04,15,270,00,06,01,010,12,13,06,292,00*36", "nmea: GPGSV invalid elevation: A03"},
- {"$GPGSV,3,1,11,03,03,A111,00,04,15,270,00,06,01,010,12,13,06,292,00*36", "nmea: GPGSV invalid azimuth: A111"},
- {"$GPGSV,3,1,11,03,03,111,A00,04,15,270,00,06,01,010,12,13,06,292,00*36", "nmea: GPGSV invalid SNR: A00"},
- }
- for _, tc := range tests {
- _, err := Parse(tc.Input)
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, tc.Error, err.Error(), "Incorrect error message")
- }
-
-}
-
-func TestGPGSVWrongSentence(t *testing.T) {
- wrongMsg := "$GPXTE,A,A,4.07,L,N*6D"
- sent, _ := ParseSentence(wrongMsg)
- _, err := NewGPGSV(sent)
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: GPGSV invalid prefix: GPXTE", err.Error(), "Incorrect error message")
-}
diff --git a/vendor/github.com/adrianmo/go-nmea/gprmc_test.go b/vendor/github.com/adrianmo/go-nmea/gprmc_test.go
deleted file mode 100644
index e73588c6..00000000
--- a/vendor/github.com/adrianmo/go-nmea/gprmc_test.go
+++ /dev/null
@@ -1,86 +0,0 @@
-package nmea
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func MustParseGPS(s string) LatLong {
- ll, err := ParseGPS(s)
- if err != nil {
- panic(err)
- }
- return ll
-}
-
-var gprmctests = []struct {
- Input string
- Output GPRMC
-}{
- {
- "$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*70",
- GPRMC{
- Time: Time{true, 22, 05, 16, 0},
- Validity: "A",
- Speed: 173.8,
- Course: 231.8,
- Date: Date{true, 13, 6, 94},
- Variation: -4.2,
- Latitude: MustParseGPS("5133.82 N"),
- Longitude: MustParseGPS("00042.24 W"),
- },
- },
- {
- "$GPRMC,142754.0,A,4302.539570,N,07920.379823,W,0.0,,070617,0.0,E,A*3F",
- GPRMC{
- Time: Time{true, 14, 27, 54, 0},
- Validity: "A",
- Speed: 0,
- Course: 0,
- Date: Date{true, 7, 6, 17},
- Variation: 0,
- Latitude: MustParseGPS("4302.539570 N"),
- Longitude: MustParseGPS("07920.379823 W"),
- },
- },
-}
-
-func TestGPRMCGoodSentence(t *testing.T) {
-
- for _, tt := range gprmctests {
-
- s, err := Parse(tt.Input)
-
- assert.NoError(t, err, "Unexpected error parsing good sentence")
- assert.Equal(t, PrefixGPRMC, s.Prefix(), "Prefix does not match")
-
- sentence := s.(GPRMC)
-
- assert.Equal(t, tt.Output.Time, sentence.Time, "Time does not match")
- assert.Equal(t, tt.Output.Validity, sentence.Validity, "Status does not match")
- assert.Equal(t, tt.Output.Speed, sentence.Speed, "Speed does not match")
- assert.Equal(t, tt.Output.Course, sentence.Course, "Course does not match")
- assert.Equal(t, tt.Output.Date, sentence.Date, "Date does not match")
- assert.Equal(t, tt.Output.Variation, sentence.Variation, "Variation does not match")
- assert.Equal(t, tt.Output.Latitude, sentence.Latitude, "Latitude does not match")
- assert.Equal(t, tt.Output.Longitude, sentence.Longitude, "Longitude does not match")
- }
-
-}
-
-func TestGPRMCBadSentence(t *testing.T) {
- badMsg := "$GPRMC,220516,D,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*75"
- _, err := Parse(badMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: GPRMC invalid validity: D", err.Error(), "Incorrect error message")
-}
-
-func TestGPRMCWrongSentence(t *testing.T) {
- wrongMsg := "$GPXTE,A,A,4.07,L,N*6D"
- _, err := Parse(wrongMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: sentence type 'GPXTE' not implemented", err.Error(), "Incorrect error message")
-}
diff --git a/vendor/github.com/adrianmo/go-nmea/gpvtg_test.go b/vendor/github.com/adrianmo/go-nmea/gpvtg_test.go
deleted file mode 100644
index a49d47f8..00000000
--- a/vendor/github.com/adrianmo/go-nmea/gpvtg_test.go
+++ /dev/null
@@ -1,38 +0,0 @@
-package nmea
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestGPVTGGoodSentence(t *testing.T) {
- goodMsg := "$GPVTG,45.5,T,67.5,M,30.45,N,56.40,K*4B"
- s, err := Parse(goodMsg)
-
- assert.NoError(t, err, "Unexpected error parsing good sentence")
- assert.Equal(t, PrefixGPVTG, s.Prefix(), "Prefix does not match")
-
- sentence := s.(GPVTG)
-
- assert.Equal(t, 45.5, sentence.TrueTrack, "True track does not match")
- assert.Equal(t, 67.5, sentence.MagneticTrack, "Magnetic track does not match")
- assert.Equal(t, 30.45, sentence.GroundSpeedKnots, "Ground speed (knots) does not match")
- assert.Equal(t, 56.40, sentence.GroundSpeedKPH, "Ground speed (km/h) does not match")
-}
-
-func TestGPVTGBadSentence(t *testing.T) {
- badMsg := "$GPVTG,T,45.5,67.5,M,30.45,N,56.40,K*4B"
- _, err := Parse(badMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: GPVTG invalid true track: T", err.Error(), "Incorrect error message")
-}
-
-func TestGPVTGWrongSentence(t *testing.T) {
- wrongMsg := "$GPXTE,A,A,4.07,L,N*6D"
- _, err := Parse(wrongMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: sentence type 'GPXTE' not implemented", err.Error(), "Incorrect error message")
-}
diff --git a/vendor/github.com/adrianmo/go-nmea/gpzda_test.go b/vendor/github.com/adrianmo/go-nmea/gpzda_test.go
deleted file mode 100644
index 5b853644..00000000
--- a/vendor/github.com/adrianmo/go-nmea/gpzda_test.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package nmea
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestGPZDAGoodSentence(t *testing.T) {
- goodMsg := "$GPZDA,172809.456,12,07,1996,00,00*57"
- s, err := Parse(goodMsg)
-
- assert.NoError(t, err, "Unexpected error parsing good sentence")
- assert.Equal(t, PrefixGPZDA, s.Prefix(), "Prefix does not match")
-
- sentence := s.(GPZDA)
-
- assert.Equal(t, Time{true, 17, 28, 9, 456}, sentence.Time, "Time does not match")
- assert.Equal(t, int64(12), sentence.Day, "Day does not match")
- assert.Equal(t, int64(7), sentence.Month, "Month does not match")
- assert.Equal(t, int64(1996), sentence.Year, "Yeah does not match")
- assert.Equal(t, int64(0), sentence.OffsetHours, "Offset (hours) does not match")
- assert.Equal(t, int64(0), sentence.OffsetMinutes, "Offset (minutes) does not match")
-}
-
-func TestGPZDABadSentence(t *testing.T) {
- badMsg := "$GPZDA,220516,D,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*76"
- _, err := Parse(badMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: GPZDA invalid day: D", err.Error(), "Incorrect error message")
-}
-
-func TestGPZDAWrongSentence(t *testing.T) {
- wrongMsg := "$GPXTE,A,A,4.07,L,N*6D"
- _, err := Parse(wrongMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: sentence type 'GPXTE' not implemented", err.Error(), "Incorrect error message")
-}
diff --git a/vendor/github.com/adrianmo/go-nmea/parser_test.go b/vendor/github.com/adrianmo/go-nmea/parser_test.go
deleted file mode 100644
index 6acdd4e1..00000000
--- a/vendor/github.com/adrianmo/go-nmea/parser_test.go
+++ /dev/null
@@ -1,226 +0,0 @@
-package nmea
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-var parsertests = []struct {
- name string
- fields []string
- expected interface{}
- hasErr bool
- parse func(p *parser) interface{}
-}{
- {
- name: "String",
- fields: []string{"foo", "bar"},
- expected: "bar",
- parse: func(p *parser) interface{} {
- return p.String(1, "")
- },
- },
- {
- name: "String out of range",
- fields: []string{"wot"},
- expected: "",
- hasErr: true,
- parse: func(p *parser) interface{} {
- return p.String(5, "thing")
- },
- },
- {
- name: "String with existing error",
- expected: "",
- hasErr: true,
- parse: func(p *parser) interface{} {
- p.SetErr("context", "value")
- return p.String(123, "blah")
- },
- },
- {
- name: "EnumString",
- fields: []string{"a", "b", "c"},
- expected: "b",
- parse: func(p *parser) interface{} {
- return p.EnumString(1, "context", "b", "d")
- },
- },
- {
- name: "EnumString invalid",
- fields: []string{"a", "b", "c"},
- expected: "",
- hasErr: true,
- parse: func(p *parser) interface{} {
- return p.EnumString(1, "context", "x", "y")
- },
- },
- {
- name: "EnumString with existing error",
- fields: []string{"a", "b", "c"},
- expected: "",
- hasErr: true,
- parse: func(p *parser) interface{} {
- p.SetErr("context", "value")
- return p.EnumString(1, "context", "a", "b")
- },
- },
- {
- name: "Int64",
- fields: []string{"123"},
- expected: int64(123),
- parse: func(p *parser) interface{} {
- return p.Int64(0, "context")
- },
- },
- {
- name: "Int64 empty field is zero",
- fields: []string{""},
- expected: int64(0),
- parse: func(p *parser) interface{} {
- return p.Int64(0, "context")
- },
- },
- {
- name: "Int64 invalid",
- fields: []string{"abc"},
- expected: int64(0),
- hasErr: true,
- parse: func(p *parser) interface{} {
- return p.Int64(0, "context")
- },
- },
- {
- name: "Int64 with existing error",
- fields: []string{"123"},
- expected: int64(0),
- hasErr: true,
- parse: func(p *parser) interface{} {
- p.SetErr("context", "value")
- return p.Int64(0, "context")
- },
- },
- {
- name: "Float64",
- fields: []string{"123.123"},
- expected: float64(123.123),
- parse: func(p *parser) interface{} {
- return p.Float64(0, "context")
- },
- },
- {
- name: "Float64 empty field is zero",
- fields: []string{""},
- expected: float64(0),
- parse: func(p *parser) interface{} {
- return p.Float64(0, "context")
- },
- },
- {
- name: "Float64 invalid",
- fields: []string{"abc"},
- expected: float64(0),
- hasErr: true,
- parse: func(p *parser) interface{} {
- return p.Float64(0, "context")
- },
- },
- {
- name: "Float64 with existing error",
- fields: []string{"123.123"},
- expected: float64(0),
- hasErr: true,
- parse: func(p *parser) interface{} {
- p.SetErr("context", "value")
- return p.Float64(0, "context")
- },
- },
- {
- name: "Time",
- fields: []string{"123456"},
- expected: Time{true, 12, 34, 56, 0},
- parse: func(p *parser) interface{} {
- return p.Time(0, "context")
- },
- },
- {
- name: "Time empty field is zero",
- fields: []string{""},
- expected: Time{},
- parse: func(p *parser) interface{} {
- return p.Time(0, "context")
- },
- },
- {
- name: "Time with existing error",
- fields: []string{"123456"},
- expected: Time{},
- hasErr: true,
- parse: func(p *parser) interface{} {
- p.SetErr("context", "value")
- return p.Time(0, "context")
- },
- },
- {
- name: "Time invalid",
- fields: []string{"wrong"},
- expected: Time{},
- hasErr: true,
- parse: func(p *parser) interface{} {
- return p.Time(0, "context")
- },
- },
- {
- name: "Date",
- fields: []string{"010203"},
- expected: Date{true, 1, 2, 3},
- parse: func(p *parser) interface{} {
- return p.Date(0, "context")
- },
- },
- {
- name: "Date empty field is zero",
- fields: []string{""},
- expected: Date{},
- parse: func(p *parser) interface{} {
- return p.Date(0, "context")
- },
- },
- {
- name: "Date invalid",
- fields: []string{"Hello"},
- expected: Date{},
- hasErr: true,
- parse: func(p *parser) interface{} {
- return p.Date(0, "context")
- },
- },
- {
- name: "Date with existing error",
- fields: []string{"010203"},
- expected: Date{},
- hasErr: true,
- parse: func(p *parser) interface{} {
- p.SetErr("context", "value")
- return p.Date(0, "context")
- },
- },
-}
-
-func TestParser(t *testing.T) {
- for _, tt := range parsertests {
- t.Run(tt.name, func(t *testing.T) {
- p := newParser(Sent{
- Type: "type",
- Fields: tt.fields,
- }, "type")
- assert.Equal(t, tt.expected, tt.parse(p))
- if tt.hasErr {
- assert.Error(t, p.Err())
- } else {
- assert.NoError(t, p.Err())
- }
- })
- }
-}
diff --git a/vendor/github.com/adrianmo/go-nmea/pgrme_test.go b/vendor/github.com/adrianmo/go-nmea/pgrme_test.go
deleted file mode 100644
index 4fbeba5b..00000000
--- a/vendor/github.com/adrianmo/go-nmea/pgrme_test.go
+++ /dev/null
@@ -1,70 +0,0 @@
-package nmea
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestPGRMEGoodSentence(t *testing.T) {
- goodMsg := "$PGRME,3.3,M,4.9,M,6.0,M*25"
- s, err := Parse(goodMsg)
-
- assert.NoError(t, err, "Unexpected error parsing good sentence")
- assert.Equal(t, PrefixPGRME, s.Prefix(), "Prefix does not match")
-
- sentence := s.(PGRME)
-
- assert.Equal(t, 3.3, sentence.Horizontal, "Horizontal error does not match")
- assert.Equal(t, 4.9, sentence.Vertical, "Vertical error does not match")
- assert.Equal(t, 6.0, sentence.Spherical, "Spherical error does not match")
-
-}
-
-func TestPGRMEInvalidHorizontalError(t *testing.T) {
- badMsg := "$PGRME,A,M,4.9,M,6.0,M*4A"
- _, err := Parse(badMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: PGRME invalid horizontal error: A", err.Error(), "Incorrect error message")
-}
-
-func TestPGRMEInvalidHorizontalErrorUnit(t *testing.T) {
- badMsg := "$PGRME,3.3,A,4.9,M,6.0,M*29"
- _, err := Parse(badMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: PGRME invalid horizontal error unit: A", err.Error(), "Incorrect error message")
-}
-
-func TestPGRMEInvalidVerticalError(t *testing.T) {
- badMsg := "$PGRME,3.3,M,A,M,6.0,M*47"
- _, err := Parse(badMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: PGRME invalid vertical error: A", err.Error(), "Incorrect error message")
-}
-
-func TestPGRMEInvalidVerticalErrorUnit(t *testing.T) {
- badMsg := "$PGRME,3.3,M,4.9,A,6.0,M*29"
- _, err := Parse(badMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: PGRME invalid vertical error unit: A", err.Error(), "Incorrect error message")
-}
-
-func TestPGRMEInvalidSphericalError(t *testing.T) {
- badMsg := "$PGRME,3.3,M,4.9,M,A,M*4C"
- _, err := Parse(badMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: PGRME invalid spherical error: A", err.Error(), "Incorrect error message")
-}
-
-func TestPGRMEInvalidSphericalErrorUnit(t *testing.T) {
- badMsg := "$PGRME,3.3,M,4.9,M,6.0,A*29"
- _, err := Parse(badMsg)
-
- assert.Error(t, err, "Parse error not returned")
- assert.Equal(t, "nmea: PGRME invalid spherical error unit: A", err.Error(), "Incorrect error message")
-}
diff --git a/vendor/github.com/adrianmo/go-nmea/sentence_test.go b/vendor/github.com/adrianmo/go-nmea/sentence_test.go
deleted file mode 100644
index 0560026a..00000000
--- a/vendor/github.com/adrianmo/go-nmea/sentence_test.go
+++ /dev/null
@@ -1,96 +0,0 @@
-package nmea
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestChecksumOK(t *testing.T) {
- _, err := ParseSentence("$GPFOO,1,2,3.3,x,y,zz,*51")
- assert.NoError(t, err, "Checksum check failed")
-}
-
-func TestChecksumBad(t *testing.T) {
- _, err := ParseSentence("$GPFOO,1,2,3.4,x,y,zz,*51")
- assert.Error(t, err, "Checksum check failed")
-}
-
-func TestChecksumBadRaw(t *testing.T) {
- badRaw := "$GPFOO,1,2,3.3,x,y,zz,*33"
- _, err := Parse(badRaw)
- assert.Error(t, err, "Expected 'Sentence checksum mismatch [51 != 33]'")
-}
-
-func TestBadStartCharacter(t *testing.T) {
- // Check that a bad start character is flagged.
- rawBadStart := "%GPFOO,1,2,3,x,y,z*1A"
- _, err := Parse(rawBadStart)
- assert.Error(t, err, "Expected 'Sentence does not start with a '$''")
-}
-
-func TestBadChecksumDelimiter(t *testing.T) {
- // Check that a bad checksum delimiter is flagged.
- rawBadSumSep := "$GPFOO,1,2,3,x,y,z"
- _, err := Parse(rawBadSumSep)
- assert.Error(t, err, "Expected 'Sentence does not contain single checksum separator'")
-}
-
-func TestGoodParsing(t *testing.T) {
- // Check for good parsing.
- raw := "$GPRMC,235236,A,3925.9479,N,11945.9211,W,44.7,153.6,250905,15.2,E,A*0C"
- _, err := Parse(raw)
- assert.NoError(t, err, "Parse error")
-}
-
-func TestGoodFields(t *testing.T) {
- raw := "$GPRMC,235236,A,3925.9479,N,11945.9211,W,44.7,153.6,250905,15.2,E,A*0C"
- expectedFields := []string{"235236", "A", "3925.9479", "N", "11945.9211", "W", "44.7", "153.6", "250905", "15.2", "E", "A"}
- m, _ := Parse(raw)
- assert.EqualValues(t, expectedFields, m.Sentence().Fields, "Got '%q', expected '%q'", m.Sentence().Fields, expectedFields)
-}
-
-func TestGoodSentenceType(t *testing.T) {
- raw := "$GPRMC,235236,A,3925.9479,N,11945.9211,W,44.7,153.6,250905,15.2,E,A*0C"
- expected := "GPRMC"
- m, _ := Parse(raw)
- assert.Equal(t, expected, m.Prefix(), "Got '%s', expected '%s'", m.Prefix(), expected)
-}
-
-func TestGoodRawSentence(t *testing.T) {
- raw := "$GPRMC,235236,A,3925.9479,N,11945.9211,W,44.7,153.6,250905,15.2,E,A*0C"
- m, _ := Parse(raw)
- assert.Equal(t, raw, m.String(), "Bad raw sentence")
-}
-
-func TestMultipleStartDelimiterSentence(t *testing.T) {
- raw := "$$$$GPRMC,235236,A,3925.9479,N,11945.9211,W,44.7,153.6,250905,15.2,E,A*0C"
- result, err := Parse(raw)
- assert.Nil(t, result, "Result should be nil")
- assert.NotNil(t, err, "Err should be an error")
- assert.Equal(t, "nmea: sentence checksum mismatch [28 != 0C]", err.Error(), "Error sentence mismatch")
-}
-
-func TestNoStartDelimiterSentence(t *testing.T) {
- raw := "abc$GPRMC,235236,A,3925.9479,N,11945.9211,W,44.7,153.6,250905,15.2,E,A*0C"
- result, err := Parse(raw)
- assert.Nil(t, result, "Result should be nil")
- assert.NotNil(t, err, "Err should be an error")
- assert.Equal(t, "nmea: sentence does not start with a '$'", err.Error(), "Error sentence mismatch")
-}
-
-func TestNoContainDelimiterSentence(t *testing.T) {
- raw := "GPRMC,235236,A,3925.9479,N,11945.9211,W,44.7,153.6,250905,15.2,E,A*0C"
- result, err := Parse(raw)
- assert.Nil(t, result, "Result should be nil")
- assert.NotNil(t, err, "Err should be an error")
- assert.Equal(t, "nmea: sentence does not start with a '$'", err.Error(), "Error sentence mismatch")
-}
-
-func TestReturnValues(t *testing.T) {
- // Ensure Parse returns errors when appropriate.
- result, err := Parse("$GPRMC,235236,A,3925.9479,N,11945.9211,W,44.7,153.6,250905,15.2,E,A*0A")
- assert.Nil(t, result, "Result should be nil")
- assert.NotNil(t, err, "Err should be an error")
- assert.Equal(t, "nmea: sentence checksum mismatch [0C != 0A]", err.Error(), "Error sentence mismatch")
-}
diff --git a/vendor/github.com/adrianmo/go-nmea/types_test.go b/vendor/github.com/adrianmo/go-nmea/types_test.go
deleted file mode 100644
index d271efdf..00000000
--- a/vendor/github.com/adrianmo/go-nmea/types_test.go
+++ /dev/null
@@ -1,152 +0,0 @@
-package nmea
-
-import "testing"
-
-var nearDistance = 0.001
-
-func TestLatLongParse(t *testing.T) {
- var l LatLong
- var err error
- value, expected := "3345.1232 N", LatLong(33.752054)
- if l, err = ParseGPS(value); err != nil {
- t.Errorf("ParseGPS error: %s", err)
- } else if !l.IsNear(expected, nearDistance) {
- t.Errorf("ParseGPS got %f, expected %f", l, expected)
- }
-
- value, expected = "15145.9877 S", LatLong(-151.76646)
- if l, err = ParseGPS(value); err != nil {
- t.Errorf("ParseGPS error: %s", err)
- } else if !l.IsNear(expected, nearDistance) {
- t.Errorf("ParseGPS got %f, expected %f", l, expected)
- }
-
- value, expected = "33\u00B0 12' 34.3423\"", LatLong(33.209540)
- if l, err = ParseDMS(value); err != nil {
- t.Errorf("ParseDMS error: %s", err)
- } else if !l.IsNear(expected, nearDistance) {
- t.Errorf("ParseDMS got %f, expected %f", l, expected)
- }
-
- value, expected = "151.234532", LatLong(151.234532)
- if l, err = ParseDecimal(value); err != nil {
- t.Errorf("ParseDecimal error: %s", err)
- } else if !l.IsNear(expected, nearDistance) {
- t.Errorf("ParseDecimal got %f, expected %f", l, expected)
- }
-
- value, expected = "-151.234532", LatLong(-151.234532)
- if l, err = ParseDecimal(value); err != nil {
- t.Errorf("ParseDecimal error: %s", err)
- } else if !l.IsNear(expected, nearDistance) {
- t.Errorf("ParseDecimal got %f, expected %f", l, expected)
- }
-}
-
-func TestLatLongPrint(t *testing.T) {
- l, _ := ParseDecimal("151.434367")
- exp := "15126.0620"
- if s := l.PrintGPS(); s != exp {
- t.Errorf("PrintGPS() got %s expected %s", s, exp)
- }
-
- l, _ = ParseGPS("3356.4343 N")
- exp = "3356.4343"
- if s := l.PrintGPS(); s != exp {
- t.Errorf("PrintGPS() got %s expected %s", s, exp)
- }
-
- exp = "33° 56' 26.058000\""
- if s := l.PrintDMS(); s != exp {
- t.Errorf("PrintDMS() got %s expected %s", s, exp)
- }
-}
-
-func TestTimeParse(t *testing.T) {
- timetests := []struct {
- value string
- expected Time
- ok bool
- }{
- {"123456", Time{true, 12, 34, 56, 0}, true},
- {"", Time{}, true},
- {"112233.123", Time{true, 11, 22, 33, 123}, true},
- {"010203.04", Time{true, 1, 2, 3, 4}, true},
- {"10203.04", Time{}, false},
- {"x0u2xd", Time{}, false},
- {"xx2233.123", Time{}, false},
- {"11xx33.123", Time{}, false},
- {"1122xx.123", Time{}, false},
- {"112233.xxx", Time{}, false},
- }
- for _, tt := range timetests {
- actual, err := ParseTime(tt.value)
- if !tt.ok {
- if err == nil {
- t.Errorf("ParseTime(%s) expected error", tt.value)
- }
- } else {
- if err != nil {
- t.Errorf("ParseTime(%s) %s", tt.value, err)
- }
- if actual != tt.expected {
- t.Errorf("ParseTime(%s) got %s expected %s", tt.value, actual, tt.expected)
- }
- }
- }
-}
-
-func TestTimeString(t *testing.T) {
- d := Time{
- Hour: 1,
- Minute: 2,
- Second: 3,
- Millisecond: 4,
- }
- expected := "01:02:03.0004"
- if s := d.String(); s != expected {
- t.Fatalf("got %s, expected %s", s, expected)
- }
-}
-
-func TestDateParse(t *testing.T) {
- datetests := []struct {
- value string
- expected Date
- ok bool
- }{
- {"010203", Date{true, 1, 2, 3}, true},
- {"01003", Date{}, false},
- {"", Date{}, true},
- {"xx0203", Date{}, false},
- {"01xx03", Date{}, false},
- {"0102xx", Date{}, false},
- }
- for _, tt := range datetests {
- actual, err := ParseDate(tt.value)
- if !tt.ok {
- if err == nil {
- t.Errorf("ParseDate(%s) expected error", tt.value)
- }
- } else {
- if err != nil {
- t.Errorf("ParseDate(%s) %s", tt.value, err)
- }
- if actual != tt.expected {
- t.Errorf("ParseDate(%s) got %s expected %s", tt.value, actual, tt.expected)
- }
- }
- }
-}
-
-func TestDateString(t *testing.T) {
- d := Date{
- DD: 1,
- MM: 2,
- YY: 3,
- }
- expected := "01/02/03"
- if s := d.String(); s != expected {
- t.Fatalf("got %s expected %s", s, expected)
- }
-}
diff --git a/vendor/github.com/chifflier/nfqueue-go/.travis.yml b/vendor/github.com/chifflier/nfqueue-go/.travis.yml
deleted file mode 100644
index 43d4d526..00000000
--- a/vendor/github.com/chifflier/nfqueue-go/.travis.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-language: go
-
-go:
- - 1.6
- - tip
-install:
- - go get github.com/google/gopacket
- - go get github.com/google/gopacket/layers
- - go get github.com/chifflier/nfqueue-go/nfqueue
-before_install:
- - sudo apt-get -qq update
- - sudo apt-get install -y pkg-config libnfnetlink-dev libnetfilter-queue-dev
diff --git a/vendor/github.com/chifflier/nfqueue-go/README.md b/vendor/github.com/chifflier/nfqueue-go/README.md
deleted file mode 100644
index 808dd9fa..00000000
--- a/vendor/github.com/chifflier/nfqueue-go/README.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# nfqueue-go
-
-
-[](https://travis-ci.org/chifflier/nfqueue-go)
-[](https://godoc.org/github.com/chifflier/nfqueue-go/nfqueue)
-
-nfqueue-go is a wrapper library for
-[libnetfilter-queue](http://www.netfilter.org/projects/libnetfilter_queue/). The goal is to provide a library to gain access to packets queued by the kernel packet filter.
-
-It is important to note that these bindings will not follow blindly libnetfilter_queue API. For ex., some higher-level wrappers will be provided for the open/bind/create mechanism (using one function call instead of three).
-
-**The API is not yet stable.**
-
-To use the library, a program must
-- open a queue
-- bind to a network family (`AF_PACKET` for IPv4)
-- provide a callback function, which will be automatically called when a packet is received. The callback must return a verdict
-- create the queue, providing the queue number (which must match the `--queue-num` from the iptables rules, see below
-- run a loop, waiting for events. The program should also provide a clean way to exit the loop (for ex on `SIGINT`)
-
-## Using library
-
-```
-import "github.com/chifflier/nfqueue-go/nfqueue"
-```
-
-## Example
-
-See [test_nfqueue](nfqueue/test_nfqueue/test_nfqueue.go) for a minimal example, and [test_nfqueue_gopacket](nfqueue/test_nfqueue_gopacket/test_nfqueue.go) for an example using the [gopacket](https://github.com/google/gopacket) library to decode the packets.
-
-## IPtables
-
-You must add rules in netfilter to send packets to the userspace queue.
-The number of the queue (--queue-num option in netfilter) must match the
-number provided to create_queue().
-
-Example of iptables rules:
-
- iptables -A OUTPUT --destination 1.2.3.4 -j NFQUEUE --queue-num 0
-
-Of course, you should be more restrictive, depending on your needs.
-
-## Privileges
-
-nfqueue-go does not require root privileges, but needs to open a netlink socket and send/receive packets to the kernel.
-
-You have several options:
-- Use the CAP_NET_ADMIN capability in order to allow your application to receive from and to send packets to kernel-space:
-```setcap 'cap_net_admin=+ep' /path/to/program```
-- Run your program as `root` and drop privileges
-
-## License
-
-This library is licensed under the GNU General Public License version 2, or (at your option) any later version.
diff --git a/vendor/github.com/chifflier/nfqueue-go/nfqueue/test_nfqueue/test_nfqueue.go b/vendor/github.com/chifflier/nfqueue-go/nfqueue/test_nfqueue/test_nfqueue.go
deleted file mode 100644
index 9f832ac8..00000000
--- a/vendor/github.com/chifflier/nfqueue-go/nfqueue/test_nfqueue/test_nfqueue.go
+++ /dev/null
@@ -1,54 +0,0 @@
-package main
-
-import (
- "encoding/hex"
- "fmt"
- "github.com/chifflier/nfqueue-go/nfqueue"
- "os"
- "os/signal"
- "syscall"
-)
-
-func real_callback(payload *nfqueue.Payload) int {
- fmt.Println("Real callback")
- fmt.Printf(" id: %d\n", payload.Id)
- fmt.Printf(" mark: %d\n", payload.GetNFMark())
- fmt.Printf(" in %d out %d\n", payload.GetInDev(), payload.GetOutDev())
- fmt.Printf(" Φin %d Φout %d\n", payload.GetPhysInDev(), payload.GetPhysOutDev())
- fmt.Println(hex.Dump(payload.Data))
- fmt.Println("-- ")
- payload.SetVerdict(nfqueue.NF_ACCEPT)
- return 0
-}
-
-func main() {
- q := new(nfqueue.Queue)
-
- q.SetCallback(real_callback)
-
- q.Init()
- defer q.Close()
-
- q.Unbind(syscall.AF_INET)
- q.Bind(syscall.AF_INET)
-
- q.CreateQueue(0)
- q.SetMode(nfqueue.NFQNL_COPY_PACKET)
-
- c := make(chan os.Signal, 1)
- signal.Notify(c, os.Interrupt)
- go func(){
- for sig := range c {
- // sig is a ^C, handle it
- _ = sig
- q.StopLoop()
- }
- }()
-
- // XXX Drop privileges here
-
- q.Loop()
- q.DestroyQueue()
- q.Close()
- os.Exit(0)
-}
diff --git a/vendor/github.com/chifflier/nfqueue-go/nfqueue/test_nfqueue_gopacket/test_nfqueue.go b/vendor/github.com/chifflier/nfqueue-go/nfqueue/test_nfqueue_gopacket/test_nfqueue.go
deleted file mode 100644
index beac36ac..00000000
--- a/vendor/github.com/chifflier/nfqueue-go/nfqueue/test_nfqueue_gopacket/test_nfqueue.go
+++ /dev/null
@@ -1,66 +0,0 @@
-package main
-
-import (
- "encoding/hex"
- "fmt"
- "github.com/chifflier/nfqueue-go/nfqueue"
- "os"
- "os/signal"
- "syscall"
-
- "github.com/google/gopacket"
- "github.com/google/gopacket/layers"
-)
-
-func real_callback(payload *nfqueue.Payload) int {
- fmt.Println("Real callback")
- fmt.Printf(" id: %d\n", payload.Id)
- fmt.Println(hex.Dump(payload.Data))
- // Decode a packet
- packet := gopacket.NewPacket(payload.Data, layers.LayerTypeIPv4, gopacket.Default)
- // Get the TCP layer from this packet
- if tcpLayer := packet.Layer(layers.LayerTypeTCP); tcpLayer != nil {
- fmt.Println("This is a TCP packet!")
- // Get actual TCP data from this layer
- tcp, _ := tcpLayer.(*layers.TCP)
- fmt.Printf("From src port %d to dst port %d\n", tcp.SrcPort, tcp.DstPort)
- }
- // Iterate over all layers, printing out each layer type
- for _, layer := range packet.Layers() {
- fmt.Println("PACKET LAYER:", layer.LayerType())
- fmt.Println(gopacket.LayerDump(layer))
- }
- fmt.Println("-- ")
- payload.SetVerdict(nfqueue.NF_ACCEPT)
- return 0
-}
-
-func main() {
- q := new(nfqueue.Queue)
-
- q.SetCallback(real_callback)
-
- q.Init()
-
- q.Unbind(syscall.AF_INET)
- q.Bind(syscall.AF_INET)
-
- q.CreateQueue(0)
-
- c := make(chan os.Signal, 1)
- signal.Notify(c, os.Interrupt)
- go func(){
- for sig := range c {
- // sig is a ^C, handle it
- _ = sig
- q.StopLoop()
- }
- }()
-
- // XXX Drop privileges here
-
- q.Loop()
- q.DestroyQueue()
- q.Close()
- os.Exit(0)
-}
diff --git a/vendor/github.com/dustin/go-humanize/bigbytes_test.go b/vendor/github.com/dustin/go-humanize/bigbytes_test.go
deleted file mode 100644
index 236ad080..00000000
--- a/vendor/github.com/dustin/go-humanize/bigbytes_test.go
+++ /dev/null
@@ -1,220 +0,0 @@
-package humanize
-
-import (
- "math/big"
- "testing"
-)
-
-func TestBigByteParsing(t *testing.T) {
- tests := []struct {
- in string
- exp uint64
- }{
- {"42", 42},
- {"42MB", 42000000},
- {"42MiB", 44040192},
- {"42mb", 42000000},
- {"42mib", 44040192},
- {"42MIB", 44040192},
- {"42 MB", 42000000},
- {"42 MiB", 44040192},
- {"42 mb", 42000000},
- {"42 mib", 44040192},
- {"42 MIB", 44040192},
- {"42.5MB", 42500000},
- {"42.5MiB", 44564480},
- {"42.5 MB", 42500000},
- {"42.5 MiB", 44564480},
- // No need to say B
- {"42M", 42000000},
- {"42Mi", 44040192},
- {"42m", 42000000},
- {"42mi", 44040192},
- {"42MI", 44040192},
- {"42 M", 42000000},
- {"42 Mi", 44040192},
- {"42 m", 42000000},
- {"42 mi", 44040192},
- {"42 MI", 44040192},
- {"42.5M", 42500000},
- {"42.5Mi", 44564480},
- {"42.5 M", 42500000},
- {"42.5 Mi", 44564480},
- {"1,005.03 MB", 1005030000},
- // Large testing, breaks when too much larger than
- // this.
- {"12.5 EB", uint64(12.5 * float64(EByte))},
- {"12.5 E", uint64(12.5 * float64(EByte))},
- {"12.5 EiB", uint64(12.5 * float64(EiByte))},
- }
-
- for _, p := range tests {
- got, err := ParseBigBytes(p.in)
- if err != nil {
- t.Errorf("Couldn't parse %v: %v", p.in, err)
- } else {
- if got.Uint64() != p.exp {
- t.Errorf("Expected %v for %v, got %v",
- p.exp, p.in, got)
- }
- }
- }
-}
-
-func TestBigByteErrors(t *testing.T) {
- got, err := ParseBigBytes("84 JB")
- if err == nil {
- t.Errorf("Expected error, got %v", got)
- }
- got, err = ParseBigBytes("")
- if err == nil {
- t.Errorf("Expected error parsing nothing")
- }
-}
-
-func bbyte(in uint64) string {
- return BigBytes((&big.Int{}).SetUint64(in))
-}
-
-func bibyte(in uint64) string {
- return BigIBytes((&big.Int{}).SetUint64(in))
-}
-
-func TestBigBytes(t *testing.T) {
- testList{
- {"bytes(0)", bbyte(0), "0 B"},
- {"bytes(1)", bbyte(1), "1 B"},
- {"bytes(803)", bbyte(803), "803 B"},
- {"bytes(999)", bbyte(999), "999 B"},
-
- {"bytes(1024)", bbyte(1024), "1.0 kB"},
- {"bytes(1MB - 1)", bbyte(MByte - Byte), "1000 kB"},
-
- {"bytes(1MB)", bbyte(1024 * 1024), "1.0 MB"},
- {"bytes(1GB - 1K)", bbyte(GByte - KByte), "1000 MB"},
-
- {"bytes(1GB)", bbyte(GByte), "1.0 GB"},
- {"bytes(1TB - 1M)", bbyte(TByte - MByte), "1000 GB"},
-
- {"bytes(1TB)", bbyte(TByte), "1.0 TB"},
- {"bytes(1PB - 1T)", bbyte(PByte - TByte), "999 TB"},
-
- {"bytes(1PB)", bbyte(PByte), "1.0 PB"},
- {"bytes(1PB - 1T)", bbyte(EByte - PByte), "999 PB"},
-
- {"bytes(1EB)", bbyte(EByte), "1.0 EB"},
- // Overflows.
- // {"bytes(1EB - 1P)", Bytes((KByte*EByte)-PByte), "1023EB"},
-
- {"bytes(0)", bibyte(0), "0 B"},
- {"bytes(1)", bibyte(1), "1 B"},
- {"bytes(803)", bibyte(803), "803 B"},
- {"bytes(1023)", bibyte(1023), "1023 B"},
-
- {"bytes(1024)", bibyte(1024), "1.0 KiB"},
- {"bytes(1MB - 1)", bibyte(MiByte - IByte), "1024 KiB"},
-
- {"bytes(1MB)", bibyte(1024 * 1024), "1.0 MiB"},
- {"bytes(1GB - 1K)", bibyte(GiByte - KiByte), "1024 MiB"},
-
- {"bytes(1GB)", bibyte(GiByte), "1.0 GiB"},
- {"bytes(1TB - 1M)", bibyte(TiByte - MiByte), "1024 GiB"},
-
- {"bytes(1TB)", bibyte(TiByte), "1.0 TiB"},
- {"bytes(1PB - 1T)", bibyte(PiByte - TiByte), "1023 TiB"},
-
- {"bytes(1PB)", bibyte(PiByte), "1.0 PiB"},
- {"bytes(1PB - 1T)", bibyte(EiByte - PiByte), "1023 PiB"},
-
- {"bytes(1EiB)", bibyte(EiByte), "1.0 EiB"},
- // Overflows.
- // {"bytes(1EB - 1P)", bibyte((KIByte*EIByte)-PiByte), "1023EB"},
-
- {"bytes(5.5GiB)", bibyte(5.5 * GiByte), "5.5 GiB"},
-
- {"bytes(5.5GB)", bbyte(5.5 * GByte), "5.5 GB"},
- }.validate(t)
-}
-
-func TestVeryBigBytes(t *testing.T) {
- b, _ := (&big.Int{}).SetString("15347691069326346944512", 10)
- s := BigBytes(b)
- if s != "15 ZB" {
- t.Errorf("Expected 15 ZB, got %v", s)
- }
- s = BigIBytes(b)
- if s != "13 ZiB" {
- t.Errorf("Expected 13 ZiB, got %v", s)
- }
-
- b, _ = (&big.Int{}).SetString("15716035654990179271180288", 10)
- s = BigBytes(b)
- if s != "16 YB" {
- t.Errorf("Expected 16 YB, got %v", s)
- }
- s = BigIBytes(b)
- if s != "13 YiB" {
- t.Errorf("Expected 13 YiB, got %v", s)
- }
-}
-
-func TestVeryVeryBigBytes(t *testing.T) {
- b, _ := (&big.Int{}).SetString("16093220510709943573688614912", 10)
- s := BigBytes(b)
- if s != "16093 YB" {
- t.Errorf("Expected 16093 YB, got %v", s)
- }
- s = BigIBytes(b)
- if s != "13312 YiB" {
- t.Errorf("Expected 13312 YiB, got %v", s)
- }
-}
-
-func TestParseVeryBig(t *testing.T) {
- tests := []struct {
- in string
- out string
- }{
- {"16 ZB", "16000000000000000000000"},
- {"16 ZiB", "18889465931478580854784"},
- {"16.5 ZB", "16500000000000000000000"},
- {"16.5 ZiB", "19479761741837286506496"},
- {"16 Z", "16000000000000000000000"},
- {"16 Zi", "18889465931478580854784"},
- {"16.5 Z", "16500000000000000000000"},
- {"16.5 Zi", "19479761741837286506496"},
-
- {"16 YB", "16000000000000000000000000"},
- {"16 YiB", "19342813113834066795298816"},
- {"16.5 YB", "16500000000000000000000000"},
- {"16.5 YiB", "19947276023641381382651904"},
- {"16 Y", "16000000000000000000000000"},
- {"16 Yi", "19342813113834066795298816"},
- {"16.5 Y", "16500000000000000000000000"},
- {"16.5 Yi", "19947276023641381382651904"},
- }
-
- for _, test := range tests {
- x, err := ParseBigBytes(test.in)
- if err != nil {
- t.Errorf("Error parsing %q: %v", test.in, err)
- continue
- }
-
- if x.String() != test.out {
- t.Errorf("Expected %q for %q, got %v", test.out, test.in, x)
- }
- }
-}
-
-func BenchmarkParseBigBytes(b *testing.B) {
- for i := 0; i < b.N; i++ {
- ParseBigBytes("16.5 Z")
- }
-}
-
-func BenchmarkBigBytes(b *testing.B) {
- for i := 0; i < b.N; i++ {
- bibyte(16.5 * GByte)
- }
-}
diff --git a/vendor/github.com/dustin/go-humanize/bytes_test.go b/vendor/github.com/dustin/go-humanize/bytes_test.go
deleted file mode 100644
index 0bb811c7..00000000
--- a/vendor/github.com/dustin/go-humanize/bytes_test.go
+++ /dev/null
@@ -1,146 +0,0 @@
-package humanize
-
-import (
- "testing"
-)
-
-func TestByteParsing(t *testing.T) {
- tests := []struct {
- in string
- exp uint64
- }{
- {"42", 42},
- {"42MB", 42000000},
- {"42MiB", 44040192},
- {"42mb", 42000000},
- {"42mib", 44040192},
- {"42MIB", 44040192},
- {"42 MB", 42000000},
- {"42 MiB", 44040192},
- {"42 mb", 42000000},
- {"42 mib", 44040192},
- {"42 MIB", 44040192},
- {"42.5MB", 42500000},
- {"42.5MiB", 44564480},
- {"42.5 MB", 42500000},
- {"42.5 MiB", 44564480},
- // No need to say B
- {"42M", 42000000},
- {"42Mi", 44040192},
- {"42m", 42000000},
- {"42mi", 44040192},
- {"42MI", 44040192},
- {"42 M", 42000000},
- {"42 Mi", 44040192},
- {"42 m", 42000000},
- {"42 mi", 44040192},
- {"42 MI", 44040192},
- {"42.5M", 42500000},
- {"42.5Mi", 44564480},
- {"42.5 M", 42500000},
- {"42.5 Mi", 44564480},
- // Bug #42
- {"1,005.03 MB", 1005030000},
- // Large testing, breaks when too much larger than
- // this.
- {"12.5 EB", uint64(12.5 * float64(EByte))},
- {"12.5 E", uint64(12.5 * float64(EByte))},
- {"12.5 EiB", uint64(12.5 * float64(EiByte))},
- }
-
- for _, p := range tests {
- got, err := ParseBytes(p.in)
- if err != nil {
- t.Errorf("Couldn't parse %v: %v", p.in, err)
- }
- if got != p.exp {
- t.Errorf("Expected %v for %v, got %v",
- p.exp, p.in, got)
- }
- }
-}
-
-func TestByteErrors(t *testing.T) {
- got, err := ParseBytes("84 JB")
- if err == nil {
- t.Errorf("Expected error, got %v", got)
- }
- got, err = ParseBytes("")
- if err == nil {
- t.Errorf("Expected error parsing nothing")
- }
- got, err = ParseBytes("16 EiB")
- if err == nil {
- t.Errorf("Expected error, got %v", got)
- }
-}
-
-func TestBytes(t *testing.T) {
- testList{
- {"bytes(0)", Bytes(0), "0 B"},
- {"bytes(1)", Bytes(1), "1 B"},
- {"bytes(803)", Bytes(803), "803 B"},
- {"bytes(999)", Bytes(999), "999 B"},
-
- {"bytes(1024)", Bytes(1024), "1.0 kB"},
- {"bytes(9999)", Bytes(9999), "10 kB"},
- {"bytes(1MB - 1)", Bytes(MByte - Byte), "1000 kB"},
-
- {"bytes(1MB)", Bytes(1024 * 1024), "1.0 MB"},
- {"bytes(1GB - 1K)", Bytes(GByte - KByte), "1000 MB"},
-
- {"bytes(1GB)", Bytes(GByte), "1.0 GB"},
- {"bytes(1TB - 1M)", Bytes(TByte - MByte), "1000 GB"},
- {"bytes(10MB)", Bytes(9999 * 1000), "10 MB"},
-
- {"bytes(1TB)", Bytes(TByte), "1.0 TB"},
- {"bytes(1PB - 1T)", Bytes(PByte - TByte), "999 TB"},
-
- {"bytes(1PB)", Bytes(PByte), "1.0 PB"},
- {"bytes(1PB - 1T)", Bytes(EByte - PByte), "999 PB"},
-
- {"bytes(1EB)", Bytes(EByte), "1.0 EB"},
- // Overflows.
- // {"bytes(1EB - 1P)", Bytes((KByte*EByte)-PByte), "1023EB"},
-
- {"bytes(0)", IBytes(0), "0 B"},
- {"bytes(1)", IBytes(1), "1 B"},
- {"bytes(803)", IBytes(803), "803 B"},
- {"bytes(1023)", IBytes(1023), "1023 B"},
-
- {"bytes(1024)", IBytes(1024), "1.0 KiB"},
- {"bytes(1MB - 1)", IBytes(MiByte - IByte), "1024 KiB"},
-
- {"bytes(1MB)", IBytes(1024 * 1024), "1.0 MiB"},
- {"bytes(1GB - 1K)", IBytes(GiByte - KiByte), "1024 MiB"},
-
- {"bytes(1GB)", IBytes(GiByte), "1.0 GiB"},
- {"bytes(1TB - 1M)", IBytes(TiByte - MiByte), "1024 GiB"},
-
- {"bytes(1TB)", IBytes(TiByte), "1.0 TiB"},
- {"bytes(1PB - 1T)", IBytes(PiByte - TiByte), "1023 TiB"},
-
- {"bytes(1PB)", IBytes(PiByte), "1.0 PiB"},
- {"bytes(1PB - 1T)", IBytes(EiByte - PiByte), "1023 PiB"},
-
- {"bytes(1EiB)", IBytes(EiByte), "1.0 EiB"},
- // Overflows.
- // {"bytes(1EB - 1P)", IBytes((KIByte*EIByte)-PiByte), "1023EB"},
-
- {"bytes(5.5GiB)", IBytes(5.5 * GiByte), "5.5 GiB"},
-
- {"bytes(5.5GB)", Bytes(5.5 * GByte), "5.5 GB"},
- }.validate(t)
-}
-
-func BenchmarkParseBytes(b *testing.B) {
- for i := 0; i < b.N; i++ {
- ParseBytes("16.5 GB")
- }
-}
-
-func BenchmarkBytes(b *testing.B) {
- for i := 0; i < b.N; i++ {
- Bytes(16.5 * GByte)
- }
-}
diff --git a/vendor/github.com/dustin/go-humanize/comma_test.go b/vendor/github.com/dustin/go-humanize/comma_test.go
deleted file mode 100644
index 89daca5f..00000000
--- a/vendor/github.com/dustin/go-humanize/comma_test.go
+++ /dev/null
@@ -1,136 +0,0 @@
-package humanize
-
-import (
- "math"
- "math/big"
- "testing"
-)
-
-func TestCommas(t *testing.T) {
- testList{
- {"0", Comma(0), "0"},
- {"10", Comma(10), "10"},
- {"100", Comma(100), "100"},
- {"1,000", Comma(1000), "1,000"},
- {"10,000", Comma(10000), "10,000"},
- {"100,000", Comma(100000), "100,000"},
- {"10,000,000", Comma(10000000), "10,000,000"},
- {"10,100,000", Comma(10100000), "10,100,000"},
- {"10,010,000", Comma(10010000), "10,010,000"},
- {"10,001,000", Comma(10001000), "10,001,000"},
- {"123,456,789", Comma(123456789), "123,456,789"},
- {"maxint", Comma(9.223372e+18), "9,223,372,000,000,000,000"},
- {"math.maxint", Comma(math.MaxInt64), "9,223,372,036,854,775,807"},
- {"math.minint", Comma(math.MinInt64), "-9,223,372,036,854,775,808"},
- {"minint", Comma(-9.223372e+18), "-9,223,372,000,000,000,000"},
- {"-123,456,789", Comma(-123456789), "-123,456,789"},
- {"-10,100,000", Comma(-10100000), "-10,100,000"},
- {"-10,010,000", Comma(-10010000), "-10,010,000"},
- {"-10,001,000", Comma(-10001000), "-10,001,000"},
- {"-10,000,000", Comma(-10000000), "-10,000,000"},
- {"-100,000", Comma(-100000), "-100,000"},
- {"-10,000", Comma(-10000), "-10,000"},
- {"-1,000", Comma(-1000), "-1,000"},
- {"-100", Comma(-100), "-100"},
- {"-10", Comma(-10), "-10"},
- }.validate(t)
-}
-
-func TestCommafs(t *testing.T) {
- testList{
- {"0", Commaf(0), "0"},
- {"10.11", Commaf(10.11), "10.11"},
- {"100", Commaf(100), "100"},
- {"1,000", Commaf(1000), "1,000"},
- {"10,000", Commaf(10000), "10,000"},
- {"100,000", Commaf(100000), "100,000"},
- {"834,142.32", Commaf(834142.32), "834,142.32"},
- {"10,000,000", Commaf(10000000), "10,000,000"},
- {"10,100,000", Commaf(10100000), "10,100,000"},
- {"10,010,000", Commaf(10010000), "10,010,000"},
- {"10,001,000", Commaf(10001000), "10,001,000"},
- {"123,456,789", Commaf(123456789), "123,456,789"},
- {"maxf64", Commaf(math.MaxFloat64), "179,769,313,486,231,570,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000"},
- {"minf64", Commaf(math.SmallestNonzeroFloat64), "0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005"},
- {"-123,456,789", Commaf(-123456789), "-123,456,789"},
- {"-10,100,000", Commaf(-10100000), "-10,100,000"},
- {"-10,010,000", Commaf(-10010000), "-10,010,000"},
- {"-10,001,000", Commaf(-10001000), "-10,001,000"},
- {"-10,000,000", Commaf(-10000000), "-10,000,000"},
- {"-100,000", Commaf(-100000), "-100,000"},
- {"-10,000", Commaf(-10000), "-10,000"},
- {"-1,000", Commaf(-1000), "-1,000"},
- {"-100.11", Commaf(-100.11), "-100.11"},
- {"-10", Commaf(-10), "-10"},
- }.validate(t)
-}
-
-func BenchmarkCommas(b *testing.B) {
- for i := 0; i < b.N; i++ {
- Comma(1234567890)
- }
-}
-
-func BenchmarkCommaf(b *testing.B) {
- for i := 0; i < b.N; i++ {
- Commaf(1234567890.83584)
- }
-}
-
-func BenchmarkBigCommas(b *testing.B) {
- for i := 0; i < b.N; i++ {
- BigComma(big.NewInt(1234567890))
- }
-}
-
-func bigComma(i int64) string {
- return BigComma(big.NewInt(i))
-}
-
-func TestBigCommas(t *testing.T) {
- testList{
- {"0", bigComma(0), "0"},
- {"10", bigComma(10), "10"},
- {"100", bigComma(100), "100"},
- {"1,000", bigComma(1000), "1,000"},
- {"10,000", bigComma(10000), "10,000"},
- {"100,000", bigComma(100000), "100,000"},
- {"10,000,000", bigComma(10000000), "10,000,000"},
- {"10,100,000", bigComma(10100000), "10,100,000"},
- {"10,010,000", bigComma(10010000), "10,010,000"},
- {"10,001,000", bigComma(10001000), "10,001,000"},
- {"123,456,789", bigComma(123456789), "123,456,789"},
- {"maxint", bigComma(9.223372e+18), "9,223,372,000,000,000,000"},
- {"minint", bigComma(-9.223372e+18), "-9,223,372,000,000,000,000"},
- {"-123,456,789", bigComma(-123456789), "-123,456,789"},
- {"-10,100,000", bigComma(-10100000), "-10,100,000"},
- {"-10,010,000", bigComma(-10010000), "-10,010,000"},
- {"-10,001,000", bigComma(-10001000), "-10,001,000"},
- {"-10,000,000", bigComma(-10000000), "-10,000,000"},
- {"-100,000", bigComma(-100000), "-100,000"},
- {"-10,000", bigComma(-10000), "-10,000"},
- {"-1,000", bigComma(-1000), "-1,000"},
- {"-100", bigComma(-100), "-100"},
- {"-10", bigComma(-10), "-10"},
- }.validate(t)
-}
-
-func TestVeryBigCommas(t *testing.T) {
- tests := []struct{ in, exp string }{
- {
- "84889279597249724975972597249849757294578485",
- "84,889,279,597,249,724,975,972,597,249,849,757,294,578,485",
- },
- {
- "-84889279597249724975972597249849757294578485",
- "-84,889,279,597,249,724,975,972,597,249,849,757,294,578,485",
- },
- }
- for _, test := range tests {
- n, _ := (&big.Int{}).SetString(test.in, 10)
- got := BigComma(n)
- if test.exp != got {
- t.Errorf("Expected %q, got %q", test.exp, got)
- }
- }
-}
diff --git a/vendor/github.com/dustin/go-humanize/commaf_test.go b/vendor/github.com/dustin/go-humanize/commaf_test.go
deleted file mode 100644
index 21f7f9e5..00000000
--- a/vendor/github.com/dustin/go-humanize/commaf_test.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// +build go1.6
-
-package humanize
-
-import (
- "math"
- "math/big"
- "testing"
-)
-
-func BenchmarkBigCommaf(b *testing.B) {
- for i := 0; i < b.N; i++ {
- Commaf(1234567890.83584)
- }
-}
-
-func TestBigCommafs(t *testing.T) {
- testList{
- {"0", BigCommaf(big.NewFloat(0)), "0"},
- {"10.11", BigCommaf(big.NewFloat(10.11)), "10.11"},
- {"100", BigCommaf(big.NewFloat(100)), "100"},
- {"1,000", BigCommaf(big.NewFloat(1000)), "1,000"},
- {"10,000", BigCommaf(big.NewFloat(10000)), "10,000"},
- {"100,000", BigCommaf(big.NewFloat(100000)), "100,000"},
- {"834,142.32", BigCommaf(big.NewFloat(834142.32)), "834,142.32"},
- {"10,000,000", BigCommaf(big.NewFloat(10000000)), "10,000,000"},
- {"10,100,000", BigCommaf(big.NewFloat(10100000)), "10,100,000"},
- {"10,010,000", BigCommaf(big.NewFloat(10010000)), "10,010,000"},
- {"10,001,000", BigCommaf(big.NewFloat(10001000)), "10,001,000"},
- {"123,456,789", BigCommaf(big.NewFloat(123456789)), "123,456,789"},
- {"maxf64", BigCommaf(big.NewFloat(math.MaxFloat64)), "179,769,313,486,231,570,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000"},
- {"minf64", BigCommaf(big.NewFloat(math.SmallestNonzeroFloat64)), "0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004940656458412465"},
- {"-123,456,789", BigCommaf(big.NewFloat(-123456789)), "-123,456,789"},
- {"-10,100,000", BigCommaf(big.NewFloat(-10100000)), "-10,100,000"},
- {"-10,010,000", BigCommaf(big.NewFloat(-10010000)), "-10,010,000"},
- {"-10,001,000", BigCommaf(big.NewFloat(-10001000)), "-10,001,000"},
- {"-10,000,000", BigCommaf(big.NewFloat(-10000000)), "-10,000,000"},
- {"-100,000", BigCommaf(big.NewFloat(-100000)), "-100,000"},
- {"-10,000", BigCommaf(big.NewFloat(-10000)), "-10,000"},
- {"-1,000", BigCommaf(big.NewFloat(-1000)), "-1,000"},
- {"-100.11", BigCommaf(big.NewFloat(-100.11)), "-100.11"},
- {"-10", BigCommaf(big.NewFloat(-10)), "-10"},
- }.validate(t)
-}
diff --git a/vendor/github.com/dustin/go-humanize/common_test.go b/vendor/github.com/dustin/go-humanize/common_test.go
deleted file mode 100644
index fc7db151..00000000
--- a/vendor/github.com/dustin/go-humanize/common_test.go
+++ /dev/null
@@ -1,18 +0,0 @@
-package humanize
-
-import (
- "testing"
-)
-
-type testList []struct {
- name, got, exp string
-}
-
-func (tl testList) validate(t *testing.T) {
- for _, test := range tl {
- if test.got != test.exp {
- t.Errorf("On %v, expected '%v', but got '%v'",
- test.name, test.exp, test.got)
- }
- }
-}
diff --git a/vendor/github.com/dustin/go-humanize/english/words.go b/vendor/github.com/dustin/go-humanize/english/words.go
deleted file mode 100644
index 26e9918b..00000000
--- a/vendor/github.com/dustin/go-humanize/english/words.go
+++ /dev/null
@@ -1,96 +0,0 @@
-// Package english provides utilities to generate more user-friendly English output.
-package english
-
-import (
- "fmt"
- "strings"
-)
-
-// These are included because they are common technical terms.
-var specialPlurals = map[string]string{
- "index": "indices",
- "matrix": "matrices",
- "vertex": "vertices",
-}
-
-var sibilantEndings = []string{"s", "sh", "tch", "x"}
-
-var isVowel = map[byte]bool{
- 'A': true, 'E': true, 'I': true, 'O': true, 'U': true,
- 'a': true, 'e': true, 'i': true, 'o': true, 'u': true,
-}
-
-// PluralWord builds the plural form of an English word.
-// The simple English rules of regular pluralization will be used
-// if the plural form is an empty string (i.e. not explicitly given).
-// The special cases are not guaranteed to work for strings outside ASCII.
-func PluralWord(quantity int, singular, plural string) string {
- if quantity == 1 {
- return singular
- }
- if plural != "" {
- return plural
- }
- if plural = specialPlurals[singular]; plural != "" {
- return plural
- }
-
- // We need to guess what the English plural might be. Keep this
- // function simple! It doesn't need to know about every possiblity;
- // only regular rules and the most common special cases.
- //
- // Reference: http://en.wikipedia.org/wiki/English_plural
-
- for _, ending := range sibilantEndings {
- if strings.HasSuffix(singular, ending) {
- return singular + "es"
- }
- }
- l := len(singular)
- if l >= 2 && singular[l-1] == 'o' && !isVowel[singular[l-2]] {
- return singular + "es"
- }
- if l >= 2 && singular[l-1] == 'y' && !isVowel[singular[l-2]] {
- return singular[:l-1] + "ies"
- }
-
- return singular + "s"
-}
-
-// Plural formats an integer and a string into a single pluralized string.
-// The simple English rules of regular pluralization will be used
-// if the plural form is an empty string (i.e. not explicitly given).
-func Plural(quantity int, singular, plural string) string {
- return fmt.Sprintf("%d %s", quantity, PluralWord(quantity, singular, plural))
-}
-
-// WordSeries converts a list of words into a word series in English.
-// It returns a string containing all the given words separated by commas,
-// the coordinating conjunction, and a serial comma, as appropriate.
-func WordSeries(words []string, conjunction string) string {
- switch len(words) {
- case 0:
- return ""
- case 1:
- return words[0]
- default:
- return fmt.Sprintf("%s %s %s", strings.Join(words[:len(words)-1], ", "), conjunction, words[len(words)-1])
- }
-}
-
-// OxfordWordSeries converts a list of words into a word series in English,
-// using an Oxford comma (https://en.wikipedia.org/wiki/Serial_comma). It
-// returns a string containing all the given words separated by commas, the
-// coordinating conjunction, and a serial comma, as appropriate.
-func OxfordWordSeries(words []string, conjunction string) string {
- switch len(words) {
- case 0:
- return ""
- case 1:
- return words[0]
- case 2:
- return strings.Join(words, fmt.Sprintf(" %s ", conjunction))
- default:
- return fmt.Sprintf("%s, %s %s", strings.Join(words[:len(words)-1], ", "), conjunction, words[len(words)-1])
- }
-}
diff --git a/vendor/github.com/dustin/go-humanize/english/words_test.go b/vendor/github.com/dustin/go-humanize/english/words_test.go
deleted file mode 100644
index 3c1d7bea..00000000
--- a/vendor/github.com/dustin/go-humanize/english/words_test.go
+++ /dev/null
@@ -1,94 +0,0 @@
-package english
-
-import (
- "testing"
-)
-
-func TestPluralWord(t *testing.T) {
- tests := []struct {
- n int
- singular, plural string
- want string
- }{
- {0, "object", "", "objects"},
- {1, "object", "", "object"},
- {-1, "object", "", "objects"},
- {42, "object", "", "objects"},
- {2, "vax", "vaxen", "vaxen"},
-
- // special cases
- {2, "index", "", "indices"},
-
- // ending in a sibilant sound
- {2, "bus", "", "buses"},
- {2, "bush", "", "bushes"},
- {2, "watch", "", "watches"},
- {2, "box", "", "boxes"},
-
- // ending with 'o' preceded by a consonant
- {2, "hero", "", "heroes"},
-
- // ending with 'y' preceded by a consonant
- {2, "lady", "", "ladies"},
- {2, "day", "", "days"},
- }
- for _, tt := range tests {
- if got := PluralWord(tt.n, tt.singular, tt.plural); got != tt.want {
- t.Errorf("PluralWord(%d, %q, %q)=%q; want: %q", tt.n, tt.singular, tt.plural, got, tt.want)
- }
- }
-}
-
-func TestPlural(t *testing.T) {
- tests := []struct {
- n int
- singular, plural string
- want string
- }{
- {1, "object", "", "1 object"},
- {42, "object", "", "42 objects"},
- }
- for _, tt := range tests {
- if got := Plural(tt.n, tt.singular, tt.plural); got != tt.want {
- t.Errorf("Plural(%d, %q, %q)=%q; want: %q", tt.n, tt.singular, tt.plural, got, tt.want)
- }
- }
-}
-
-func TestWordSeries(t *testing.T) {
- tests := []struct {
- words []string
- conjunction string
- want string
- }{
- {[]string{}, "and", ""},
- {[]string{"foo"}, "and", "foo"},
- {[]string{"foo", "bar"}, "and", "foo and bar"},
- {[]string{"foo", "bar", "baz"}, "and", "foo, bar and baz"},
- {[]string{"foo", "bar", "baz"}, "or", "foo, bar or baz"},
- }
- for _, tt := range tests {
- if got := WordSeries(tt.words, tt.conjunction); got != tt.want {
- t.Errorf("WordSeries(%q, %q)=%q; want: %q", tt.words, tt.conjunction, got, tt.want)
- }
- }
-}
-
-func TestOxfordWordSeries(t *testing.T) {
- tests := []struct {
- words []string
- conjunction string
- want string
- }{
- {[]string{}, "and", ""},
- {[]string{"foo"}, "and", "foo"},
- {[]string{"foo", "bar"}, "and", "foo and bar"},
- {[]string{"foo", "bar", "baz"}, "and", "foo, bar, and baz"},
- {[]string{"foo", "bar", "baz"}, "or", "foo, bar, or baz"},
- }
- for _, tt := range tests {
- if got := OxfordWordSeries(tt.words, tt.conjunction); got != tt.want {
- t.Errorf("OxfordWordSeries(%q, %q)=%q; want: %q", tt.words, tt.conjunction, got, tt.want)
- }
- }
-}
diff --git a/vendor/github.com/dustin/go-humanize/ftoa_test.go b/vendor/github.com/dustin/go-humanize/ftoa_test.go
deleted file mode 100644
index 276d411b..00000000
--- a/vendor/github.com/dustin/go-humanize/ftoa_test.go
+++ /dev/null
@@ -1,55 +0,0 @@
-package humanize
-
-import (
- "fmt"
- "regexp"
- "strconv"
- "testing"
-)
-
-func TestFtoa(t *testing.T) {
- testList{
- {"200", Ftoa(200), "200"},
- {"2", Ftoa(2), "2"},
- {"2.2", Ftoa(2.2), "2.2"},
- {"2.02", Ftoa(2.02), "2.02"},
- {"200.02", Ftoa(200.02), "200.02"},
- }.validate(t)
-}
-
-func BenchmarkFtoaRegexTrailing(b *testing.B) {
- trailingZerosRegex := regexp.MustCompile(`\.?0+$`)
-
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- trailingZerosRegex.ReplaceAllString("2.00000", "")
- trailingZerosRegex.ReplaceAllString("2.0000", "")
- trailingZerosRegex.ReplaceAllString("2.000", "")
- trailingZerosRegex.ReplaceAllString("2.00", "")
- trailingZerosRegex.ReplaceAllString("2.0", "")
- trailingZerosRegex.ReplaceAllString("2", "")
- }
-}
-
-func BenchmarkFtoaFunc(b *testing.B) {
- for i := 0; i < b.N; i++ {
- stripTrailingZeros("2.00000")
- stripTrailingZeros("2.0000")
- stripTrailingZeros("2.000")
- stripTrailingZeros("2.00")
- stripTrailingZeros("2.0")
- stripTrailingZeros("2")
- }
-}
-
-func BenchmarkFmtF(b *testing.B) {
- for i := 0; i < b.N; i++ {
- _ = fmt.Sprintf("%f", 2.03584)
- }
-}
-
-func BenchmarkStrconvF(b *testing.B) {
- for i := 0; i < b.N; i++ {
- strconv.FormatFloat(2.03584, 'f', 6, 64)
- }
-}
diff --git a/vendor/github.com/dustin/go-humanize/number_test.go b/vendor/github.com/dustin/go-humanize/number_test.go
deleted file mode 100644
index 516f3378..00000000
--- a/vendor/github.com/dustin/go-humanize/number_test.go
+++ /dev/null
@@ -1,79 +0,0 @@
-package humanize
-
-import (
- "math"
- "testing"
-)
-
-type TestStruct struct {
- name string
- format string
- num float64
- formatted string
-}
-
-func TestFormatFloat(t *testing.T) {
- tests := []TestStruct{
- {"default", "", 12345.6789, "12,345.68"},
- {"#", "#", 12345.6789, "12345.678900000"},
- {"#.", "#.", 12345.6789, "12346"},
- {"#,#", "#,#", 12345.6789, "12345,7"},
- {"#,##", "#,##", 12345.6789, "12345,68"},
- {"#,###", "#,###", 12345.6789, "12345,679"},
- {"#,###.", "#,###.", 12345.6789, "12,346"},
- {"#,###.##", "#,###.##", 12345.6789, "12,345.68"},
- {"#,###.###", "#,###.###", 12345.6789, "12,345.679"},
- {"#,###.####", "#,###.####", 12345.6789, "12,345.6789"},
- {"#.###,######", "#.###,######", 12345.6789, "12.345,678900"},
- {"bug46", "#,###.##", 52746220055.92342, "52,746,220,055.92"},
- {"#\u202f###,##", "#\u202f###,##", 12345.6789, "12 345,68"},
-
- // special cases
- {"NaN", "#", math.NaN(), "NaN"},
- {"+Inf", "#", math.Inf(1), "Infinity"},
- {"-Inf", "#", math.Inf(-1), "-Infinity"},
- {"signStr <= -0.000000001", "", -0.000000002, "-0.00"},
- {"signStr = 0", "", 0, "0.00"},
- {"Format directive must start with +", "+000", 12345.6789, "+12345.678900000"},
- }
-
- for _, test := range tests {
- got := FormatFloat(test.format, test.num)
- if got != test.formatted {
- t.Errorf("On %v (%v, %v), got %v, wanted %v",
- test.name, test.format, test.num, got, test.formatted)
- }
- }
- // Test a single integer
- got := FormatInteger("#", 12345)
- if got != "12345.000000000" {
- t.Errorf("On %v (%v, %v), got %v, wanted %v",
- "integerTest", "#", 12345, got, "12345.000000000")
- }
- // Test the things that could panic
- panictests := []TestStruct{
- {"RenderFloat(): invalid positive sign directive", "-", 12345.6789, "12,345.68"},
- {"RenderFloat(): thousands separator directive must be followed by 3 digit-specifiers", "0.01", 12345.6789, "12,345.68"},
- }
- for _, test := range panictests {
- didPanic := false
- var message interface{}
- func() {
-
- defer func() {
- if message = recover(); message != nil {
- didPanic = true
- }
- }()
-
- // call the target function
- _ = FormatFloat(test.format, test.num)
-
- }()
- if didPanic != true {
- t.Errorf("On %v, should have panic and did not.",
- test.name)
- }
- }
-
-}
diff --git a/vendor/github.com/dustin/go-humanize/ordinals_test.go b/vendor/github.com/dustin/go-humanize/ordinals_test.go
deleted file mode 100644
index 51d85ee7..00000000
--- a/vendor/github.com/dustin/go-humanize/ordinals_test.go
+++ /dev/null
@@ -1,22 +0,0 @@
-package humanize
-
-import (
- "testing"
-)
-
-func TestOrdinals(t *testing.T) {
- testList{
- {"0", Ordinal(0), "0th"},
- {"1", Ordinal(1), "1st"},
- {"2", Ordinal(2), "2nd"},
- {"3", Ordinal(3), "3rd"},
- {"4", Ordinal(4), "4th"},
- {"10", Ordinal(10), "10th"},
- {"11", Ordinal(11), "11th"},
- {"12", Ordinal(12), "12th"},
- {"13", Ordinal(13), "13th"},
- {"101", Ordinal(101), "101st"},
- {"102", Ordinal(102), "102nd"},
- {"103", Ordinal(103), "103rd"},
- }.validate(t)
-}
diff --git a/vendor/github.com/dustin/go-humanize/si_test.go b/vendor/github.com/dustin/go-humanize/si_test.go
deleted file mode 100644
index bc5bac66..00000000
--- a/vendor/github.com/dustin/go-humanize/si_test.go
+++ /dev/null
@@ -1,101 +0,0 @@
-package humanize
-
-import (
- "math"
- "testing"
-)
-
-func TestSI(t *testing.T) {
- tests := []struct {
- name string
- num float64
- formatted string
- }{
- {"e-24", 1e-24, "1 yF"},
- {"e-21", 1e-21, "1 zF"},
- {"e-18", 1e-18, "1 aF"},
- {"e-15", 1e-15, "1 fF"},
- {"e-12", 1e-12, "1 pF"},
- {"e-12", 2.2345e-12, "2.2345 pF"},
- {"e-12", 2.23e-12, "2.23 pF"},
- {"e-11", 2.23e-11, "22.3 pF"},
- {"e-10", 2.2e-10, "220 pF"},
- {"e-9", 2.2e-9, "2.2 nF"},
- {"e-8", 2.2e-8, "22 nF"},
- {"e-7", 2.2e-7, "220 nF"},
- {"e-6", 2.2e-6, "2.2 µF"},
- {"e-6", 1e-6, "1 µF"},
- {"e-5", 2.2e-5, "22 µF"},
- {"e-4", 2.2e-4, "220 µF"},
- {"e-3", 2.2e-3, "2.2 mF"},
- {"e-2", 2.2e-2, "22 mF"},
- {"e-1", 2.2e-1, "220 mF"},
- {"e+0", 2.2e-0, "2.2 F"},
- {"e+0", 2.2, "2.2 F"},
- {"e+1", 2.2e+1, "22 F"},
- {"0", 0, "0 F"},
- {"e+1", 22, "22 F"},
- {"e+2", 2.2e+2, "220 F"},
- {"e+2", 220, "220 F"},
- {"e+3", 2.2e+3, "2.2 kF"},
- {"e+3", 2200, "2.2 kF"},
- {"e+4", 2.2e+4, "22 kF"},
- {"e+4", 22000, "22 kF"},
- {"e+5", 2.2e+5, "220 kF"},
- {"e+6", 2.2e+6, "2.2 MF"},
- {"e+6", 1e+6, "1 MF"},
- {"e+7", 2.2e+7, "22 MF"},
- {"e+8", 2.2e+8, "220 MF"},
- {"e+9", 2.2e+9, "2.2 GF"},
- {"e+10", 2.2e+10, "22 GF"},
- {"e+11", 2.2e+11, "220 GF"},
- {"e+12", 2.2e+12, "2.2 TF"},
- {"e+15", 2.2e+15, "2.2 PF"},
- {"e+18", 2.2e+18, "2.2 EF"},
- {"e+21", 2.2e+21, "2.2 ZF"},
- {"e+24", 2.2e+24, "2.2 YF"},
-
- // special case
- {"1F", 1000 * 1000, "1 MF"},
- {"1F", 1e6, "1 MF"},
-
- // negative number
- {"-100 F", -100, "-100 F"},
- }
-
- for _, test := range tests {
- got := SI(test.num, "F")
- if got != test.formatted {
- t.Errorf("On %v (%v), got %v, wanted %v",
- test.name, test.num, got, test.formatted)
- }
-
- gotf, gotu, err := ParseSI(test.formatted)
- if err != nil {
- t.Errorf("Error parsing %v (%v): %v", test.name, test.formatted, err)
- continue
- }
-
- if math.Abs(1-(gotf/test.num)) > 0.01 {
- t.Errorf("On %v (%v), got %v, wanted %v (±%v)",
- test.name, test.formatted, gotf, test.num,
- math.Abs(1-(gotf/test.num)))
- }
- if gotu != "F" {
- t.Errorf("On %v (%v), expected unit F, got %v",
- test.name, test.formatted, gotu)
- }
- }
-
- // Parse error
- gotf, gotu, err := ParseSI("x1.21JW") // 1.21 jigga whats
- if err == nil {
- t.Errorf("Expected error on x1.21JW, got %v %v", gotf, gotu)
- }
-}
-
-func BenchmarkParseSI(b *testing.B) {
- for i := 0; i < b.N; i++ {
- ParseSI("2.2346ZB")
- }
-}
diff --git a/vendor/github.com/dustin/go-humanize/times_test.go b/vendor/github.com/dustin/go-humanize/times_test.go
deleted file mode 100644
index b1ab8bf8..00000000
--- a/vendor/github.com/dustin/go-humanize/times_test.go
+++ /dev/null
@@ -1,124 +0,0 @@
-package humanize
-
-import (
- "math"
- "testing"
- "time"
-)
-
-func TestPast(t *testing.T) {
- now := time.Now()
- testList{
- {"now", Time(now), "now"},
- {"1 second ago", Time(now.Add(-1 * time.Second)), "1 second ago"},
- {"12 seconds ago", Time(now.Add(-12 * time.Second)), "12 seconds ago"},
- {"30 seconds ago", Time(now.Add(-30 * time.Second)), "30 seconds ago"},
- {"45 seconds ago", Time(now.Add(-45 * time.Second)), "45 seconds ago"},
- {"1 minute ago", Time(now.Add(-63 * time.Second)), "1 minute ago"},
- {"15 minutes ago", Time(now.Add(-15 * time.Minute)), "15 minutes ago"},
- {"1 hour ago", Time(now.Add(-63 * time.Minute)), "1 hour ago"},
- {"2 hours ago", Time(now.Add(-2 * time.Hour)), "2 hours ago"},
- {"21 hours ago", Time(now.Add(-21 * time.Hour)), "21 hours ago"},
- {"1 day ago", Time(now.Add(-26 * time.Hour)), "1 day ago"},
- {"2 days ago", Time(now.Add(-49 * time.Hour)), "2 days ago"},
- {"3 days ago", Time(now.Add(-3 * Day)), "3 days ago"},
- {"1 week ago (1)", Time(now.Add(-7 * Day)), "1 week ago"},
- {"1 week ago (2)", Time(now.Add(-12 * Day)), "1 week ago"},
- {"2 weeks ago", Time(now.Add(-15 * Day)), "2 weeks ago"},
- {"1 month ago", Time(now.Add(-39 * Day)), "1 month ago"},
- {"3 months ago", Time(now.Add(-99 * Day)), "3 months ago"},
- {"1 year ago (1)", Time(now.Add(-365 * Day)), "1 year ago"},
- {"1 year ago (1)", Time(now.Add(-400 * Day)), "1 year ago"},
- {"2 years ago (1)", Time(now.Add(-548 * Day)), "2 years ago"},
- {"2 years ago (2)", Time(now.Add(-725 * Day)), "2 years ago"},
- {"2 years ago (3)", Time(now.Add(-800 * Day)), "2 years ago"},
- {"3 years ago", Time(now.Add(-3 * Year)), "3 years ago"},
- {"long ago", Time(now.Add(-LongTime)), "a long while ago"},
- }.validate(t)
-}
-
-func TestReltimeOffbyone(t *testing.T) {
- testList{
- {"1w-1", RelTime(time.Unix(0, 0), time.Unix(7*24*60*60, -1), "ago", ""), "6 days ago"},
- {"1w±0", RelTime(time.Unix(0, 0), time.Unix(7*24*60*60, 0), "ago", ""), "1 week ago"},
- {"1w+1", RelTime(time.Unix(0, 0), time.Unix(7*24*60*60, 1), "ago", ""), "1 week ago"},
- {"2w-1", RelTime(time.Unix(0, 0), time.Unix(14*24*60*60, -1), "ago", ""), "1 week ago"},
- {"2w±0", RelTime(time.Unix(0, 0), time.Unix(14*24*60*60, 0), "ago", ""), "2 weeks ago"},
- {"2w+1", RelTime(time.Unix(0, 0), time.Unix(14*24*60*60, 1), "ago", ""), "2 weeks ago"},
- }.validate(t)
-}
-
-func TestFuture(t *testing.T) {
- // Add a little time so that these things properly line up in
- // the future.
- now := time.Now().Add(time.Millisecond * 250)
- testList{
- {"now", Time(now), "now"},
- {"1 second from now", Time(now.Add(+1 * time.Second)), "1 second from now"},
- {"12 seconds from now", Time(now.Add(+12 * time.Second)), "12 seconds from now"},
- {"30 seconds from now", Time(now.Add(+30 * time.Second)), "30 seconds from now"},
- {"45 seconds from now", Time(now.Add(+45 * time.Second)), "45 seconds from now"},
- {"15 minutes from now", Time(now.Add(+15 * time.Minute)), "15 minutes from now"},
- {"2 hours from now", Time(now.Add(+2 * time.Hour)), "2 hours from now"},
- {"21 hours from now", Time(now.Add(+21 * time.Hour)), "21 hours from now"},
- {"1 day from now", Time(now.Add(+26 * time.Hour)), "1 day from now"},
- {"2 days from now", Time(now.Add(+49 * time.Hour)), "2 days from now"},
- {"3 days from now", Time(now.Add(+3 * Day)), "3 days from now"},
- {"1 week from now (1)", Time(now.Add(+7 * Day)), "1 week from now"},
- {"1 week from now (2)", Time(now.Add(+12 * Day)), "1 week from now"},
- {"2 weeks from now", Time(now.Add(+15 * Day)), "2 weeks from now"},
- {"1 month from now", Time(now.Add(+30 * Day)), "1 month from now"},
- {"1 year from now", Time(now.Add(+365 * Day)), "1 year from now"},
- {"2 years from now", Time(now.Add(+2 * Year)), "2 years from now"},
- {"a while from now", Time(now.Add(+LongTime)), "a long while from now"},
- }.validate(t)
-}
-
-func TestRange(t *testing.T) {
- start := time.Time{}
- end := time.Unix(math.MaxInt64, math.MaxInt64)
- x := RelTime(start, end, "ago", "from now")
- if x != "a long while from now" {
- t.Errorf("Expected a long while from now, got %q", x)
- }
-}
-
-func TestCustomRelTime(t *testing.T) {
- now := time.Now().Add(time.Millisecond * 250)
- magnitudes := []RelTimeMagnitude{
- {time.Second, "now", time.Second},
- {2 * time.Second, "1 second %s", 1},
- {time.Minute, "%d seconds %s", time.Second},
- {Day - time.Second, "%d minutes %s", time.Minute},
- {Day, "%d hours %s", time.Hour},
- {2 * Day, "1 day %s", 1},
- {Week, "%d days %s", Day},
- {2 * Week, "1 week %s", 1},
- {6 * Month, "%d weeks %s", Week},
- {Year, "%d months %s", Month},
- }
- customRelTime := func(then time.Time) string {
- return CustomRelTime(then, time.Now(), "ago", "from now", magnitudes)
- }
- testList{
- {"now", customRelTime(now), "now"},
- {"1 second from now", customRelTime(now.Add(+1 * time.Second)), "1 second from now"},
- {"12 seconds from now", customRelTime(now.Add(+12 * time.Second)), "12 seconds from now"},
- {"30 seconds from now", customRelTime(now.Add(+30 * time.Second)), "30 seconds from now"},
- {"45 seconds from now", customRelTime(now.Add(+45 * time.Second)), "45 seconds from now"},
- {"15 minutes from now", customRelTime(now.Add(+15 * time.Minute)), "15 minutes from now"},
- {"2 hours from now", customRelTime(now.Add(+2 * time.Hour)), "120 minutes from now"},
- {"21 hours from now", customRelTime(now.Add(+21 * time.Hour)), "1260 minutes from now"},
- {"1 day from now", customRelTime(now.Add(+26 * time.Hour)), "1 day from now"},
- {"2 days from now", customRelTime(now.Add(+49 * time.Hour)), "2 days from now"},
- {"3 days from now", customRelTime(now.Add(+3 * Day)), "3 days from now"},
- {"1 week from now (1)", customRelTime(now.Add(+7 * Day)), "1 week from now"},
- {"1 week from now (2)", customRelTime(now.Add(+12 * Day)), "1 week from now"},
- {"2 weeks from now", customRelTime(now.Add(+15 * Day)), "2 weeks from now"},
- {"1 month from now", customRelTime(now.Add(+30 * Day)), "4 weeks from now"},
- {"6 months from now", customRelTime(now.Add(+6*Month - time.Second)), "25 weeks from now"},
- {"1 year from now", customRelTime(now.Add(+365 * Day)), "12 months from now"},
- {"2 years from now", customRelTime(now.Add(+2 * Year)), "24 months from now"},
- {"a while from now", customRelTime(now.Add(+LongTime)), "444 months from now"},
- }.validate(t)
-}
diff --git a/vendor/github.com/elazarl/goproxy/certs/openssl-gen.sh b/vendor/github.com/elazarl/goproxy/certs/openssl-gen.sh
deleted file mode 100755
index fdaab6a8..00000000
--- a/vendor/github.com/elazarl/goproxy/certs/openssl-gen.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-set -ex
-# generate CA's key
-openssl genrsa -aes256 -passout pass:1 -out ca.key.pem 4096
-openssl rsa -passin pass:1 -in ca.key.pem -out ca.key.pem.tmp
-mv ca.key.pem.tmp ca.key.pem
-
-openssl req -config openssl.cnf -key ca.key.pem -new -x509 -days 7300 -sha256 -extensions v3_ca -out ca.pem
diff --git a/vendor/github.com/elazarl/goproxy/certs/openssl.cnf b/vendor/github.com/elazarl/goproxy/certs/openssl.cnf
deleted file mode 100644
index 2fbb5e5f..00000000
--- a/vendor/github.com/elazarl/goproxy/certs/openssl.cnf
+++ /dev/null
@@ -1,39 +0,0 @@
-[ ca ]
-default_ca = CA_default
-[ CA_default ]
-default_md = sha256
-[ v3_ca ]
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid:always,issuer
-basicConstraints = critical,CA:true
-[ req ]
-distinguished_name = req_distinguished_name
-[ req_distinguished_name ]
-countryName = Country Name (2 letter code)
-countryName_default = IL
-countryName_min = 2
-countryName_max = 2
-
-stateOrProvinceName = State or Province Name (full name)
-stateOrProvinceName_default = Center
-
-localityName = Locality Name (eg, city)
-localityName_default = Lod
-
-0.organizationName = Organization Name (eg, company)
-0.organizationName_default = GoProxy
-
-# we can do this but it is not needed normally :-)
-#1.organizationName = Second Organization Name (eg, company)
-#1.organizationName_default = World Wide Web Pty Ltd
-
-organizationalUnitName = Organizational Unit Name (eg, section)
-organizationalUnitName_default = GoProxy
-
-commonName = Common Name (e.g. server FQDN or YOUR name)
-commonName_default = goproxy.github.io
-commonName_max = 64
-
-emailAddress = Email Address
-emailAddress_default = elazarl@gmail.com
-emailAddress_max = 64
diff --git a/vendor/github.com/elazarl/goproxy/counterecryptor_test.go b/vendor/github.com/elazarl/goproxy/counterecryptor_test.go
deleted file mode 100644
index 12b31e16..00000000
--- a/vendor/github.com/elazarl/goproxy/counterecryptor_test.go
+++ /dev/null
@@ -1,99 +0,0 @@
-package goproxy_test
-
-import (
- "bytes"
- "crypto/rsa"
- "encoding/binary"
- "github.com/elazarl/goproxy"
- "io"
- "math"
- "math/rand"
- "testing"
-)
-
-type RandSeedReader struct {
- r rand.Rand
-}
-
-func (r *RandSeedReader) Read(b []byte) (n int, err error) {
- for i := range b {
- b[i] = byte(r.r.Int() & 0xFF)
- }
- return len(b), nil
-}
-
-func TestCounterEncDifferentConsecutive(t *testing.T) {
- k, err := rsa.GenerateKey(&RandSeedReader{*rand.New(rand.NewSource(0xFF43109))}, 128)
- fatalOnErr(err, "rsa.GenerateKey", t)
- c, err := goproxy.NewCounterEncryptorRandFromKey(k, []byte("the quick brown fox run over the lazy dog"))
- fatalOnErr(err, "NewCounterEncryptorRandFromKey", t)
- for i := 0; i < 100*1000; i++ {
- var a, b int64
- binary.Read(&c, binary.BigEndian, &a)
- binary.Read(&c, binary.BigEndian, &b)
- if a == b {
- t.Fatal("two consecutive equal int64", a, b)
- }
- }
-}
-
-func TestCounterEncIdenticalStreams(t *testing.T) {
- k, err := rsa.GenerateKey(&RandSeedReader{*rand.New(rand.NewSource(0xFF43109))}, 128)
- fatalOnErr(err, "rsa.GenerateKey", t)
- c1, err := goproxy.NewCounterEncryptorRandFromKey(k, []byte("the quick brown fox run over the lazy dog"))
- fatalOnErr(err, "NewCounterEncryptorRandFromKey", t)
- c2, err := goproxy.NewCounterEncryptorRandFromKey(k, []byte("the quick brown fox run over the lazy dog"))
- fatalOnErr(err, "NewCounterEncryptorRandFromKey", t)
- nout := 1000
- out1, out2 := make([]byte, nout), make([]byte, nout)
- io.ReadFull(&c1, out1)
- tmp := out2[:]
- rand.Seed(0xFF43109)
- for len(tmp) > 0 {
- n := 1 + rand.Intn(256)
- if n > len(tmp) {
- n = len(tmp)
- }
- n, err := c2.Read(tmp[:n])
- fatalOnErr(err, "CounterEncryptorRand.Read", t)
- tmp = tmp[n:]
- }
- if !bytes.Equal(out1, out2) {
- t.Error("identical CSPRNG does not produce the same output")
- }
-}
-
-func stddev(data []int) float64 {
- var sum, sum_sqr float64 = 0, 0
- for _, h := range data {
- sum += float64(h)
- sum_sqr += float64(h) * float64(h)
- }
- n := float64(len(data))
- variance := (sum_sqr - ((sum * sum) / n)) / (n - 1)
- return math.Sqrt(variance)
-}
-
-func TestCounterEncStreamHistogram(t *testing.T) {
- k, err := rsa.GenerateKey(&RandSeedReader{*rand.New(rand.NewSource(0xFF43109))}, 128)
- fatalOnErr(err, "rsa.GenerateKey", t)
- c, err := goproxy.NewCounterEncryptorRandFromKey(k, []byte("the quick brown fox run over the lazy dog"))
- fatalOnErr(err, "NewCounterEncryptorRandFromKey", t)
- nout := 100 * 1000
- out := make([]byte, nout)
- io.ReadFull(&c, out)
- refhist := make([]int, 256)
- for i := 0; i < nout; i++ {
- refhist[rand.Intn(256)]++
- }
- hist := make([]int, 256)
- for _, b := range out {
- hist[int(b)]++
- }
- refstddev, stddev := stddev(refhist), stddev(hist)
- // due to lack of time, I guestimate
- t.Logf("ref:%v - act:%v = %v", refstddev, stddev, math.Abs(refstddev-stddev))
- if math.Abs(refstddev-stddev) >= 1 {
- t.Errorf("stddev of ref histogram different than regular PRNG: %v %v", refstddev, stddev)
- }
-}
diff --git a/vendor/github.com/elazarl/goproxy/examples/goproxy-basic/README.md b/vendor/github.com/elazarl/goproxy/examples/goproxy-basic/README.md
deleted file mode 100644
index 8778f2a7..00000000
--- a/vendor/github.com/elazarl/goproxy/examples/goproxy-basic/README.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Simple HTTP Proxy
-
-`goproxy-basic` starts an HTTP proxy on :8080. It only handles explicit CONNECT
-requests.
-
-Start it in one shell:
-
-```sh
-goproxy-basic -v
-```
-
-Fetch goproxy homepage in another:
-
-```sh
-http_proxy=http://127.0.0.1:8080 wget -O - \
- http://ripper234.com/p/introducing-goproxy-light-http-proxy/
-```
-
-The homepage HTML content should be displayed in the console. The proxy should
-have logged the request being processed:
-
-```sh
-2015/04/09 18:19:17 [001] INFO: Got request /p/introducing-goproxy-light-http-proxy/ ripper234.com GET http://ripper234.com/p/introducing-goproxy-light-http-proxy/
-2015/04/09 18:19:17 [001] INFO: Sending request GET http://ripper234.com/p/introducing-goproxy-light-http-proxy/
-2015/04/09 18:19:18 [001] INFO: Received response 200 OK
-2015/04/09 18:19:18 [001] INFO: Copying response to client 200 OK [200]
-2015/04/09 18:19:18 [001] INFO: Copied 44333 bytes to client error=
-```
-
diff --git a/vendor/github.com/elazarl/goproxy/examples/goproxy-basic/main.go b/vendor/github.com/elazarl/goproxy/examples/goproxy-basic/main.go
deleted file mode 100644
index 22dc4a90..00000000
--- a/vendor/github.com/elazarl/goproxy/examples/goproxy-basic/main.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package main
-
-import (
- "github.com/elazarl/goproxy"
- "log"
- "flag"
- "net/http"
-)
-
-func main() {
- verbose := flag.Bool("v", false, "should every proxy request be logged to stdout")
- addr := flag.String("addr", ":8080", "proxy listen address")
- flag.Parse()
- proxy := goproxy.NewProxyHttpServer()
- proxy.Verbose = *verbose
- log.Fatal(http.ListenAndServe(*addr, proxy))
-}
diff --git a/vendor/github.com/elazarl/goproxy/examples/goproxy-customca/cert.go b/vendor/github.com/elazarl/goproxy/examples/goproxy-customca/cert.go
deleted file mode 100644
index f4fb578f..00000000
--- a/vendor/github.com/elazarl/goproxy/examples/goproxy-customca/cert.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package main
-
-import (
- "crypto/tls"
- "crypto/x509"
-
- "github.com/elazarl/goproxy"
-)
-
-var caCert = []byte(`-----BEGIN CERTIFICATE-----
-MIIDkzCCAnugAwIBAgIJAKe/ZGdfcHdPMA0GCSqGSIb3DQEBCwUAMGAxCzAJBgNV
-BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
-aWRnaXRzIFB0eSBMdGQxGTAXBgNVBAMMEGRlbW8gZm9yIGdvcHJveHkwHhcNMTYw
-OTI3MTQzNzQ3WhcNMTkwOTI3MTQzNzQ3WjBgMQswCQYDVQQGEwJBVTETMBEGA1UE
-CAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRk
-MRkwFwYDVQQDDBBkZW1vIGZvciBnb3Byb3h5MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA2+W48YZoch72zj0a+ZlyFVY2q2MWmqsEY9f/u53fAeTxvPE6
-1/DnqsydnA3FnGvxw9Dz0oZO6xG+PZvp+lhN07NZbuXK1nie8IpxCa342axpu4C0
-69lZwxikpGyJO4IL5ywp/qfb5a2DxPTAyQOQ8ROAaydoEmktRp25yicnQ2yeZW//
-1SIQxt7gRxQIGmuOQ/Gqr/XN/z2cZdbGJVRUvQXk7N6NhQiCX1zlmp1hzUW9jwC+
-JEKKF1XVpQbc94Bo5supxhkKJ70CREPy8TH9mAUcQUZQRohnPvvt/lKneYAGhjHK
-vhpajwlbMMSocVXFvY7o/IqIE/+ZUeQTs1SUwQIDAQABo1AwTjAdBgNVHQ4EFgQU
-GnlWcIbfsWJW7GId+6xZIK8YlFEwHwYDVR0jBBgwFoAUGnlWcIbfsWJW7GId+6xZ
-IK8YlFEwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAoFUjSD15rKlY
-xudzyVlr6n0fRNhITkiZMX3JlFOvtHNYif8RfK4TH/oHNBTmle69AgixjMgy8GGd
-H90prytGQ5zCs1tKcCFsN5gRSgdAkc2PpRFOK6u8HwOITV5lV7sjucsddXJcOJbQ
-4fyVe47V9TTxI+A7lRnUP2HYTR1Bd0R/IgRAH57d1ZHs7omHIuQ+Ea8ph2ppXMnP
-DXVOlZ9zfczSnPnQoomqULOU9Fq2ycyi8Y/ROtAHP6O7wCFbYHXhxojdaHSdhkcd
-troTflFMD2/4O6MtBKbHxSmEG6H0FBYz5xUZhZq7WUH24V3xYsfge29/lOCd5/Xf
-A+j0RJc/lQ==
------END CERTIFICATE-----`)
-
-var caKey = []byte(`-----BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEA2+W48YZoch72zj0a+ZlyFVY2q2MWmqsEY9f/u53fAeTxvPE6
-1/DnqsydnA3FnGvxw9Dz0oZO6xG+PZvp+lhN07NZbuXK1nie8IpxCa342axpu4C0
-69lZwxikpGyJO4IL5ywp/qfb5a2DxPTAyQOQ8ROAaydoEmktRp25yicnQ2yeZW//
-1SIQxt7gRxQIGmuOQ/Gqr/XN/z2cZdbGJVRUvQXk7N6NhQiCX1zlmp1hzUW9jwC+
-JEKKF1XVpQbc94Bo5supxhkKJ70CREPy8TH9mAUcQUZQRohnPvvt/lKneYAGhjHK
-vhpajwlbMMSocVXFvY7o/IqIE/+ZUeQTs1SUwQIDAQABAoIBAHK94ww8W0G5QIWL
-Qwkc9XeGvg4eLUxVknva2Ll4fkZJxY4WveKx9OCd1lv4n7WoacYIwUGIDaQBZShW
-s/eKnkmqGy+PvpC87gqL4sHvQpuqqJ1LYpxylLEFqduWOuGPUVC2Lc+QnWCycsCS
-CgqZzsbMq0S+kkKRGSvw32JJneZCzqLgLNssQNVk+Gm6SI3s4jJsGPesjhnvoPaa
-xZK14uFpltaA05GSTDaQeZJFEdnnb3f/eNPc2xMEfi0S2ZlJ6Q92WJEOepAetDlR
-cRFi004bNyTb4Bphg8s4+9Cti5is199aFkGCRDWxeqEnc6aMY3Ezu9Qg3uttLVUd
-uy830GUCgYEA7qS0X+9UH1R02L3aoANyADVbFt2ZpUwQGauw9WM92pH52xeHAw1S
-ohus6FI3OC8xQq2CN525tGLUbFDZnNZ3YQHqFsfgevfnTs1//gbKXomitev0oFKh
-VT+WYS4lkgYtPlXzhdGuk32q99T/wIocAguvCUY3PiA7yBz93ReyausCgYEA6+P8
-bugMqT8qjoiz1q/YCfxsw9bAGWjlVqme2xmp256AKtxvCf1BPsToAaJU3nFi3vkw
-ICLxUWAYoMBODJ3YnbOsIZOavdXZwYHv54JqwqFealC3DG0Du6fZYZdiY8pK+E6m
-3fiYzP1WoVK5tU4bH8ibuIQvpcI8j7Gy0cV6/AMCgYBHl7fZNAZro72uLD7DVGVF
-9LvP/0kR0uDdoqli5JPw12w6szM40i1hHqZfyBJy042WsFDpeHL2z9Nkb1jpeVm1
-C4r7rJkGqwqElJf6UHUzqVzb8N6hnkhyN7JYkyyIQzwdgFGfaslRzBiXYxoa3BQM
-9Q5c3OjDxY3JuhDa3DoVYwKBgDNqrWJLSD832oHZAEIicBe1IswJKjQfriWWsV6W
-mHSbdtpg0/88aZVR/DQm+xLFakSp0jifBTS0momngRu06Dtvp2xmLQuF6oIIXY97
-2ON1owvPbibSOEcWDgb8pWCU/oRjOHIXts6vxctCKeKAFN93raGphm0+Ck9T72NU
-BTubAoGBAMEhI/Wy9wAETuXwN84AhmPdQsyCyp37YKt2ZKaqu37x9v2iL8JTbPEz
-pdBzkA2Gc0Wdb6ekIzRrTsJQl+c/0m9byFHsRsxXW2HnezfOFX1H4qAmF6KWP0ub
-M8aIn6Rab4sNPSrvKGrU6rFpv/6M33eegzldVnV9ku6uPJI1fFTC
------END RSA PRIVATE KEY-----`)
-
-func setCA(caCert, caKey []byte) error {
- goproxyCa, err := tls.X509KeyPair(caCert, caKey)
- if err != nil {
- return err
- }
- if goproxyCa.Leaf, err = x509.ParseCertificate(goproxyCa.Certificate[0]); err != nil {
- return err
- }
- goproxy.GoproxyCa = goproxyCa
- goproxy.OkConnect = &goproxy.ConnectAction{Action: goproxy.ConnectAccept, TLSConfig: goproxy.TLSConfigFromCA(&goproxyCa)}
- goproxy.MitmConnect = &goproxy.ConnectAction{Action: goproxy.ConnectMitm, TLSConfig: goproxy.TLSConfigFromCA(&goproxyCa)}
- goproxy.HTTPMitmConnect = &goproxy.ConnectAction{Action: goproxy.ConnectHTTPMitm, TLSConfig: goproxy.TLSConfigFromCA(&goproxyCa)}
- goproxy.RejectConnect = &goproxy.ConnectAction{Action: goproxy.ConnectReject, TLSConfig: goproxy.TLSConfigFromCA(&goproxyCa)}
- return nil
-}
diff --git a/vendor/github.com/elazarl/goproxy/examples/goproxy-customca/main.go b/vendor/github.com/elazarl/goproxy/examples/goproxy-customca/main.go
deleted file mode 100644
index 11171ef6..00000000
--- a/vendor/github.com/elazarl/goproxy/examples/goproxy-customca/main.go
+++ /dev/null
@@ -1,20 +0,0 @@
-package main
-
-import (
- "flag"
- "log"
- "net/http"
-
- "github.com/elazarl/goproxy"
-)
-
-func main() {
- verbose := flag.Bool("v", false, "should every proxy request be logged to stdout")
- addr := flag.String("addr", ":8080", "proxy listen address")
- flag.Parse()
- setCA(caCert, caKey)
- proxy := goproxy.NewProxyHttpServer()
- proxy.OnRequest().HandleConnect(goproxy.AlwaysMitm)
- proxy.Verbose = *verbose
- log.Fatal(http.ListenAndServe(*addr, proxy))
-}
diff --git a/vendor/github.com/elazarl/goproxy/examples/goproxy-eavesdropper/main.go b/vendor/github.com/elazarl/goproxy/examples/goproxy-eavesdropper/main.go
deleted file mode 100644
index 9d80653b..00000000
--- a/vendor/github.com/elazarl/goproxy/examples/goproxy-eavesdropper/main.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package main
-
-import (
- "bufio"
- "flag"
- "log"
- "net"
- "net/http"
- "regexp"
-
- "github.com/elazarl/goproxy"
-)
-
-func orPanic(err error) {
- if err != nil {
- panic(err)
- }
-}
-
-func main() {
- proxy := goproxy.NewProxyHttpServer()
- proxy.OnRequest(goproxy.ReqHostMatches(regexp.MustCompile("^.*baidu.com$"))).
- HandleConnect(goproxy.AlwaysReject)
- proxy.OnRequest(goproxy.ReqHostMatches(regexp.MustCompile("^.*$"))).
- HandleConnect(goproxy.AlwaysMitm)
- // enable curl -p for all hosts on port 80
- proxy.OnRequest(goproxy.ReqHostMatches(regexp.MustCompile("^.*:80$"))).
- HijackConnect(func(req *http.Request, client net.Conn, ctx *goproxy.ProxyCtx) {
- defer func() {
- if e := recover(); e != nil {
- ctx.Logf("error connecting to remote: %v", e)
- client.Write([]byte("HTTP/1.1 500 Cannot reach destination\r\n\r\n"))
- }
- client.Close()
- }()
- clientBuf := bufio.NewReadWriter(bufio.NewReader(client), bufio.NewWriter(client))
- remote, err := net.Dial("tcp", req.URL.Host)
- orPanic(err)
- remoteBuf := bufio.NewReadWriter(bufio.NewReader(remote), bufio.NewWriter(remote))
- for {
- req, err := http.ReadRequest(clientBuf.Reader)
- orPanic(err)
- orPanic(req.Write(remoteBuf))
- orPanic(remoteBuf.Flush())
- resp, err := http.ReadResponse(remoteBuf.Reader, req)
- orPanic(err)
- orPanic(resp.Write(clientBuf.Writer))
- orPanic(clientBuf.Flush())
- }
- })
- verbose := flag.Bool("v", false, "should every proxy request be logged to stdout")
- addr := flag.String("addr", ":8080", "proxy listen address")
- flag.Parse()
- proxy.Verbose = *verbose
- log.Fatal(http.ListenAndServe(*addr, proxy))
-}
diff --git a/vendor/github.com/elazarl/goproxy/examples/goproxy-httpdump/README.md b/vendor/github.com/elazarl/goproxy/examples/goproxy-httpdump/README.md
deleted file mode 100644
index 7240d8ea..00000000
--- a/vendor/github.com/elazarl/goproxy/examples/goproxy-httpdump/README.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# Trace HTTP Requests and Responses
-
-`goproxy-httpdump` starts an HTTP proxy on :8080. It handles explicit CONNECT
-requests and traces them in a "db" directory created in the proxy working
-directory. Each request type and headers are logged in a "log" file, while
-their bodies are dumped in files prefixed with the request session identifier.
-
-Additionally, the example demonstrates how to:
-- Log information asynchronously (see HttpLogger)
-- Allow the proxy to be stopped manually while ensuring all pending requests
- have been processed (in this case, logged).
-
-Start it in one shell:
-
-```sh
-goproxy-httpdump
-```
-
-Fetch goproxy homepage in another:
-
-```sh
-http_proxy=http://127.0.0.1:8080 wget -O - \
- http://ripper234.com/p/introducing-goproxy-light-http-proxy/
-```
-
-A "db" directory should have appeared where you started the proxy, containing
-two files:
-- log: the request/response traces
-- 1\_resp: the first response body
-
diff --git a/vendor/github.com/elazarl/goproxy/examples/goproxy-httpdump/httpdump.go b/vendor/github.com/elazarl/goproxy/examples/goproxy-httpdump/httpdump.go
deleted file mode 100644
index 62a9b882..00000000
--- a/vendor/github.com/elazarl/goproxy/examples/goproxy-httpdump/httpdump.go
+++ /dev/null
@@ -1,285 +0,0 @@
-package main
-
-import (
- "errors"
- "flag"
- "fmt"
- "io"
- "log"
- "net"
- "net/http"
- "net/http/httputil"
- "os"
- "os/signal"
- "path"
- "sync"
- "time"
-
- "github.com/elazarl/goproxy"
- "github.com/elazarl/goproxy/transport"
-)
-
-type FileStream struct {
- path string
- f *os.File
-}
-
-func NewFileStream(path string) *FileStream {
- return &FileStream{path, nil}
-}
-
-func (fs *FileStream) Write(b []byte) (nr int, err error) {
- if fs.f == nil {
- fs.f, err = os.Create(fs.path)
- if err != nil {
- return 0, err
- }
- }
- return fs.f.Write(b)
-}
-
-func (fs *FileStream) Close() error {
- fmt.Println("Close", fs.path)
- if fs.f == nil {
- return errors.New("FileStream was never written into")
- }
- return fs.f.Close()
-}
-
-type Meta struct {
- req *http.Request
- resp *http.Response
- err error
- t time.Time
- sess int64
- bodyPath string
- from string
-}
-
-func fprintf(nr *int64, err *error, w io.Writer, pat string, a ...interface{}) {
- if *err != nil {
- return
- }
- var n int
- n, *err = fmt.Fprintf(w, pat, a...)
- *nr += int64(n)
-}
-
-func write(nr *int64, err *error, w io.Writer, b []byte) {
- if *err != nil {
- return
- }
- var n int
- n, *err = w.Write(b)
- *nr += int64(n)
-}
-
-func (m *Meta) WriteTo(w io.Writer) (nr int64, err error) {
- if m.req != nil {
- fprintf(&nr, &err, w, "Type: request\r\n")
- } else if m.resp != nil {
- fprintf(&nr, &err, w, "Type: response\r\n")
- }
- fprintf(&nr, &err, w, "ReceivedAt: %v\r\n", m.t)
- fprintf(&nr, &err, w, "Session: %d\r\n", m.sess)
- fprintf(&nr, &err, w, "From: %v\r\n", m.from)
- if m.err != nil {
- // note the empty response
- fprintf(&nr, &err, w, "Error: %v\r\n\r\n\r\n\r\n", m.err)
- } else if m.req != nil {
- fprintf(&nr, &err, w, "\r\n")
- buf, err2 := httputil.DumpRequest(m.req, false)
- if err2 != nil {
- return nr, err2
- }
- write(&nr, &err, w, buf)
- } else if m.resp != nil {
- fprintf(&nr, &err, w, "\r\n")
- buf, err2 := httputil.DumpResponse(m.resp, false)
- if err2 != nil {
- return nr, err2
- }
- write(&nr, &err, w, buf)
- }
- return
-}
-
-// HttpLogger is an asynchronous HTTP request/response logger. It traces
-// requests and responses headers in a "log" file in logger directory and dumps
-// their bodies in files prefixed with the session identifiers.
-// Close it to ensure pending items are correctly logged.
-type HttpLogger struct {
- path string
- c chan *Meta
- errch chan error
-}
-
-func NewLogger(basepath string) (*HttpLogger, error) {
- f, err := os.Create(path.Join(basepath, "log"))
- if err != nil {
- return nil, err
- }
- logger := &HttpLogger{basepath, make(chan *Meta), make(chan error)}
- go func() {
- for m := range logger.c {
- if _, err := m.WriteTo(f); err != nil {
- log.Println("Can't write meta", err)
- }
- }
- logger.errch <- f.Close()
- }()
- return logger, nil
-}
-
-func (logger *HttpLogger) LogResp(resp *http.Response, ctx *goproxy.ProxyCtx) {
- body := path.Join(logger.path, fmt.Sprintf("%d_resp", ctx.Session))
- from := ""
- if ctx.UserData != nil {
- from = ctx.UserData.(*transport.RoundTripDetails).TCPAddr.String()
- }
- if resp == nil {
- resp = emptyResp
- } else {
- resp.Body = NewTeeReadCloser(resp.Body, NewFileStream(body))
- }
- logger.LogMeta(&Meta{
- resp: resp,
- err: ctx.Error,
- t: time.Now(),
- sess: ctx.Session,
- from: from})
-}
-
-var emptyResp = &http.Response{}
-var emptyReq = &http.Request{}
-
-func (logger *HttpLogger) LogReq(req *http.Request, ctx *goproxy.ProxyCtx) {
- body := path.Join(logger.path, fmt.Sprintf("%d_req", ctx.Session))
- if req == nil {
- req = emptyReq
- } else {
- req.Body = NewTeeReadCloser(req.Body, NewFileStream(body))
- }
- logger.LogMeta(&Meta{
- req: req,
- err: ctx.Error,
- t: time.Now(),
- sess: ctx.Session,
- from: req.RemoteAddr})
-}
-
-func (logger *HttpLogger) LogMeta(m *Meta) {
- logger.c <- m
-}
-
-func (logger *HttpLogger) Close() error {
- close(logger.c)
- return <-logger.errch
-}
-
-// TeeReadCloser extends io.TeeReader by allowing reader and writer to be
-// closed.
-type TeeReadCloser struct {
- r io.Reader
- w io.WriteCloser
- c io.Closer
-}
-
-func NewTeeReadCloser(r io.ReadCloser, w io.WriteCloser) io.ReadCloser {
- return &TeeReadCloser{io.TeeReader(r, w), w, r}
-}
-
-func (t *TeeReadCloser) Read(b []byte) (int, error) {
- return t.r.Read(b)
-}
-
-// Close attempts to close the reader and write. It returns an error if both
-// failed to Close.
-func (t *TeeReadCloser) Close() error {
- err1 := t.c.Close()
- err2 := t.w.Close()
- if err1 != nil {
- return err1
- }
- return err2
-}
-
-// stoppableListener serves stoppableConn and tracks their lifetime to notify
-// when it is safe to terminate the application.
-type stoppableListener struct {
- net.Listener
- sync.WaitGroup
-}
-
-type stoppableConn struct {
- net.Conn
- wg *sync.WaitGroup
-}
-
-func newStoppableListener(l net.Listener) *stoppableListener {
- return &stoppableListener{l, sync.WaitGroup{}}
-}
-
-func (sl *stoppableListener) Accept() (net.Conn, error) {
- c, err := sl.Listener.Accept()
- if err != nil {
- return c, err
- }
- sl.Add(1)
- return &stoppableConn{c, &sl.WaitGroup}, nil
-}
-
-func (sc *stoppableConn) Close() error {
- sc.wg.Done()
- return sc.Conn.Close()
-}
-
-func main() {
- verbose := flag.Bool("v", false, "should every proxy request be logged to stdout")
- addr := flag.String("l", ":8080", "on which address should the proxy listen")
- flag.Parse()
- proxy := goproxy.NewProxyHttpServer()
- proxy.Verbose = *verbose
- if err := os.MkdirAll("db", 0755); err != nil {
- log.Fatal("Can't create dir", err)
- }
- logger, err := NewLogger("db")
- if err != nil {
- log.Fatal("can't open log file", err)
- }
- tr := transport.Transport{Proxy: transport.ProxyFromEnvironment}
- // For every incoming request, override the RoundTripper to extract
- // connection information. Store it is session context log it after
- // handling the response.
- proxy.OnRequest().DoFunc(func(req *http.Request, ctx *goproxy.ProxyCtx) (*http.Request, *http.Response) {
- ctx.RoundTripper = goproxy.RoundTripperFunc(func(req *http.Request, ctx *goproxy.ProxyCtx) (resp *http.Response, err error) {
- ctx.UserData, resp, err = tr.DetailedRoundTrip(req)
- return
- })
- logger.LogReq(req, ctx)
- return req, nil
- })
- proxy.OnResponse().DoFunc(func(resp *http.Response, ctx *goproxy.ProxyCtx) *http.Response {
- logger.LogResp(resp, ctx)
- return resp
- })
- l, err := net.Listen("tcp", *addr)
- if err != nil {
- log.Fatal("listen:", err)
- }
- sl := newStoppableListener(l)
- ch := make(chan os.Signal)
- signal.Notify(ch, os.Interrupt)
- go func() {
- <-ch
- log.Println("Got SIGINT exiting")
- sl.Add(1)
- sl.Close()
- logger.Close()
- sl.Done()
- }()
- log.Println("Starting Proxy")
- http.Serve(sl, proxy)
- sl.Wait()
- log.Println("All connections closed - exit")
-}
diff --git a/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/README.md b/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/README.md
deleted file mode 100644
index 6efba22a..00000000
--- a/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/README.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Content Analysis
-
-`goproxy-jquery-version` starts an HTTP proxy on :8080. It checks HTML
-responses, looks for scripts referencing jQuery library and emits warnings if
-different versions of the library are being used for a given host.
-
-Start it in one shell:
-
-```sh
-goproxy-jquery-version
-```
-
-Fetch goproxy homepage in another:
-
-```sh
-http_proxy=http://127.0.0.1:8080 wget -O - \
- http://ripper234.com/p/introducing-goproxy-light-http-proxy/
-```
-
-Goproxy homepage uses jQuery and a mix of plugins. First the proxy reports the
-first use of jQuery it detects for the domain. Then, because the regular
-expression matching the jQuery sources is imprecise, it reports a mismatch with
-a plugin reference:
-
-```sh
-2015/04/11 11:23:02 [001] WARN: ripper234.com uses //ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js
-2015/04/11 11:23:02 [001] WARN: In http://ripper234.com/p/introducing-goproxy-light-http-proxy/, \
- Contradicting jqueries //ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js \
- http://ripper234.wpengine.netdna-cdn.com/wp-content/plugins/wp-ajax-edit-comments/js/jquery.colorbox.min.js?ver=5.0.36
-```
-
diff --git a/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/jquery1.html b/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/jquery1.html
deleted file mode 100644
index 26771ce3..00000000
--- a/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/jquery1.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/jquery2.html b/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/jquery2.html
deleted file mode 100644
index 7dce0361..00000000
--- a/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/jquery2.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
jQuery is a new kind of JavaScript Library.
-
jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript.
-
-
-
-
-
Grab the latest version!
-
-
-
-
-
-
Who's using jQuery?
-
-
-
-
-
-
-
-
Learn jQuery Now!
-
What does jQuery code look like? Here's the quick and dirty:
-
-
$("p.neat").addClass("ohmy").show("slow");
-
Run Code
-
-
Congratulations! You just ran a snippet of jQuery code. Wasn't that easy? There's lots of example code throughout the documentation on this site. Be sure to give all the code a test run to see what happens.
-
-
-
-
-
-
-
jQuery Resources
-
-
-
Getting Started With jQuery
-
-
-
-
Developer Resources
-
-
-
-
-
-
-
-
Books About jQuery
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/jquery_test.go b/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/jquery_test.go
deleted file mode 100644
index af300aaf..00000000
--- a/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/jquery_test.go
+++ /dev/null
@@ -1,118 +0,0 @@
-package main
-
-import (
- "bytes"
- "io/ioutil"
- "log"
- "net/http"
- "net/http/httptest"
- "net/url"
- "strings"
- "testing"
-)
-
-func equal(u, v []string) bool {
- if len(u) != len(v) {
- return false
- }
- for i, _ := range u {
- if u[i] != v[i] {
- return false
- }
- }
- return true
-}
-
-func readFile(fname string, t *testing.T) string {
- b, err := ioutil.ReadFile(fname)
- if err != nil {
- t.Fatal("readFile", err)
- }
- return string(b)
-}
-
-func TestDefectiveScriptParser(t *testing.T) {
- if l := len(findScriptSrc(`
-
-
-
-
-
-
-
- Your browser does not support the video tag.
-
-
-
- `)); l != 0 {
- t.Fail()
- }
- urls := findScriptSrc(readFile("w3schools.html", t))
- if !equal(urls, []string{"http://partner.googleadservices.com/gampad/google_service.js",
- "//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"}) {
- t.Error("w3schools.html", "src scripts are not recognized", urls)
- }
- urls = findScriptSrc(readFile("jquery_homepage.html", t))
- if !equal(urls, []string{"http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js",
- "http://code.jquery.com/jquery-1.4.2.min.js",
- "http://static.jquery.com/files/rocker/scripts/custom.js",
- "http://static.jquery.com/donate/donate.js"}) {
- t.Error("jquery_homepage.html", "src scripts are not recognized", urls)
- }
-}
-
-func proxyWithLog() (*http.Client, *bytes.Buffer) {
- proxy := NewJqueryVersionProxy()
- proxyServer := httptest.NewServer(proxy)
- buf := new(bytes.Buffer)
- proxy.Logger = log.New(buf, "", 0)
- proxyUrl, _ := url.Parse(proxyServer.URL)
- tr := &http.Transport{Proxy: http.ProxyURL(proxyUrl)}
- client := &http.Client{Transport: tr}
- return client, buf
-}
-
-func get(t *testing.T, server *httptest.Server, client *http.Client, url string) {
- resp, err := client.Get(server.URL + url)
- if err != nil {
- t.Fatal("cannot get proxy", err)
- }
- ioutil.ReadAll(resp.Body)
- resp.Body.Close()
-}
-
-func TestProxyServiceTwoVersions(t *testing.T) {
- var fs = httptest.NewServer(http.FileServer(http.Dir(".")))
- defer fs.Close()
-
- client, buf := proxyWithLog()
-
- get(t, fs, client, "/w3schools.html")
- get(t, fs, client, "/php_man.html")
- if buf.String() != "" &&
- !strings.Contains(buf.String(), " uses jquery ") {
- t.Error("shouldn't warn on a single URL", buf.String())
- }
- get(t, fs, client, "/jquery1.html")
- warnings := buf.String()
- if !strings.Contains(warnings, "http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js") ||
- !strings.Contains(warnings, "jquery.1.4.js") ||
- !strings.Contains(warnings, "Contradicting") {
- t.Error("contradicting jquery versions (php_man.html, w3schools.html) does not issue warning", warnings)
- }
-}
-
-func TestProxyService(t *testing.T) {
- var fs = httptest.NewServer(http.FileServer(http.Dir(".")))
- defer fs.Close()
-
- client, buf := proxyWithLog()
-
- get(t, fs, client, "/jquery_homepage.html")
- warnings := buf.String()
- if !strings.Contains(warnings, "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js") ||
- !strings.Contains(warnings, "http://code.jquery.com/jquery-1.4.2.min.js") ||
- !strings.Contains(warnings, "Contradicting") {
- t.Error("contradicting jquery versions does not issue warning")
- }
-}
diff --git a/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/main.go b/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/main.go
deleted file mode 100644
index a92dddea..00000000
--- a/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/main.go
+++ /dev/null
@@ -1,64 +0,0 @@
-package main
-
-import (
- "github.com/elazarl/goproxy"
- "github.com/elazarl/goproxy/ext/html"
- "log"
- "net/http"
- "regexp"
-)
-
-var (
- // who said we can't parse HTML with regexp?
- scriptMatcher = regexp.MustCompile(`(?i:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
[edit ] Last updated: Fri, 23 Mar 2012
-
-
-
-
-
-
PHP Manual
-
-
-
-
-
-
-
by :
-
- Mehdi Achour
-
-
-
-
-
-
- Friedhelm Betz
-
-
-
-
-
-
- Antony Dovgal
-
-
-
-
-
-
- Nuno Lopes
-
-
-
-
-
-
- Hannes Magnusson
-
-
-
-
-
-
- Georg Richter
-
-
-
-
-
-
- Damien Seguy
-
-
-
-
-
-
- Jakub Vrana
-
-
-
-
-
-
-
-
-
2012-03-23
-
-
-
Edited By :
-
- Philip Olson
-
-
-
-
-
-
©
- 1997-2012
- the PHP Documentation Group
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
add a note
-
User Contributed Notes
-
PHP Manual
-
-
There are no user contributed notes for this page.
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/jquery_homepage.html b/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/jquery_homepage.html
deleted file mode 100644
index 27dd0b38..00000000
--- a/vendor/github.com/elazarl/goproxy/examples/goproxy-jquery-version/jquery_homepage.html
+++ /dev/null
@@ -1,233 +0,0 @@
-
-
-