From a742433a56ce1954a5b9b60e4d61ebe6363fcb0d Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Thu, 27 Jan 2022 15:22:04 -0700 Subject: [PATCH] update config for fastexact, gzip decompress fastexact at parse time --- broker/fastexact.go | 15 +++++++++++++++ broker/fastexact_test.go | 36 ++++++++++++++++++++++++++++++++++++ config.json | 5 +++++ config.main_test.json | 5 +++++ 4 files changed, 61 insertions(+) diff --git a/broker/fastexact.go b/broker/fastexact.go index c551e3b..bb58cc8 100644 --- a/broker/fastexact.go +++ b/broker/fastexact.go @@ -2,12 +2,14 @@ package broker import ( "bytes" + "compress/gzip" "errors" "fmt" "io" "io/ioutil" "local/storage" "local/truckstop/config" + "local/truckstop/logtr" "net/http" "strconv" "strings" @@ -104,6 +106,7 @@ func (fe FastExact) searchOne(state config.State) ([]Job, error) { return nil, err } resp, err := fe.doer.doRequest(req) + logtr.Verbosef("req: %+v => resp: %+v", req, resp) if err != nil { return nil, err } @@ -132,6 +135,16 @@ func (fe FastExact) doRequest(req *http.Request) (*http.Response, error) { } func (fe FastExact) parse(resp *http.Response) ([]Job, error) { + b, _ := ioutil.ReadAll(resp.Body) + if !bytes.HasPrefix(bytes.TrimSpace(b), []byte("<")) { + gzip, err := gzip.NewReader(bytes.NewReader(b)) + if err != nil { + return nil, err + } + b, _ = ioutil.ReadAll(gzip) + } + logtr.Verbosef("fe.parse %s", b) + resp.Body = io.NopCloser(bytes.NewReader(b)) doc, err := goquery.NewDocumentFromReader(resp.Body) if err != nil { return nil, err @@ -174,6 +187,8 @@ func (fe FastExact) parse(resp *http.Response) ([]Job, error) { job.Meta = fmt.Sprintf(`dimensions:%s`, strings.ToLower(strings.ReplaceAll(strings.ReplaceAll(columns[5], " ", ""), "\n", ""))) + logtr.Verbosef("fe.parse %+v => %+v", columns, job) + result = append(result, job) }) return result, nil diff --git a/broker/fastexact_test.go b/broker/fastexact_test.go index 0a31168..0a26e7d 100644 --- a/broker/fastexact_test.go +++ b/broker/fastexact_test.go @@ -3,11 +3,47 @@ package broker import ( "local/storage" "local/truckstop/config" + "os" + "path" "testing" "golang.org/x/time/rate" ) +func TestFastExactReal(t *testing.T) { + if os.Getenv("INTEGRATION_FAST_EXACT") == "" { + t.Skip("$INTEGRATION_FAST_EXACT not set") + } + os.Setenv("CONFIG", "../config.json") + if err := config.Refresh(nil); err != nil { + t.Fatal(err) + } + conf := config.Get() + conf.Storage = []string{"files", path.Join(t.TempDir(), "storage")} + os.Setenv("CONFIG", path.Join(t.TempDir(), "config.json")) + config.Set(*conf) + if err := config.Refresh(nil); err != nil { + t.Fatal(err) + } + states := []config.State{ + config.State("NC"), + } + + fe := NewFastExact() + if err := fe.login(); err != nil { + t.Fatal(err) + } + jobs, err := fe.search(states) + if err != nil { + t.Fatal(err) + } + + t.Logf("%d", len(jobs)) + for i := range jobs { + t.Logf("[%d] %+v", i, jobs[i]) + } +} + func TestFastExactLogin(t *testing.T) { limiter = rate.NewLimiter(rate.Limit(60.0), 1) fe := NewFastExact().WithMock() diff --git a/config.json b/config.json index c9c7a50..c94f84d 100644 --- a/config.json +++ b/config.json @@ -71,6 +71,11 @@ }, "Once": true, "Brokers": { + "FastExact": { + "Mock": false, + "Username": "birdman", + "Password": "166647" + }, "NTG": { "JobInfo": true, "Mock": true, diff --git a/config.main_test.json b/config.main_test.json index c9e3335..b08b6f3 100644 --- a/config.main_test.json +++ b/config.main_test.json @@ -71,6 +71,11 @@ }, "Once": true, "Brokers": { + "FastExact": { + "Mock": true, + "Username": "u", + "Password": "p" + }, "NTG": { "JobInfo": true, "Mock": true,