diff options
author | 2022-11-08 09:35:24 +0000 | |
---|---|---|
committer | 2022-11-08 10:35:24 +0100 | |
commit | 0e572460830ce7767562f08034f96d51e41b6349 (patch) | |
tree | 2ffad44c4d6f07b9d4c3bd494d6d1a3d3918692f /internal/httpclient/queue_test.go | |
parent | [chore] update gruf libraries (#996) (diff) | |
download | gotosocial-0e572460830ce7767562f08034f96d51e41b6349.tar.xz |
[feature] various worker / request queue improvements (#995)
* greatly simplify httpclient request queuing
Signed-off-by: kim <grufwub@gmail.com>
* improved request queue mutex logic
Signed-off-by: kim <grufwub@gmail.com>
* use improved hashmap library
Signed-off-by: kim <grufwub@gmail.com>
* add warn logging when request queues are full
Signed-off-by: kim <grufwub@gmail.com>
* improve worker pool prefix var naming
Signed-off-by: kim <grufwub@gmail.com>
* improved worker pool error logging
Signed-off-by: kim <grufwub@gmail.com>
* move error message into separate field
Signed-off-by: kim <grufwub@gmail.com>
* remove old log statement
Signed-off-by: kim <grufwub@gmail.com>
* don't export worker message, it gets very spammy :')
Signed-off-by: kim <grufwub@gmail.com>
Signed-off-by: kim <grufwub@gmail.com>
Diffstat (limited to 'internal/httpclient/queue_test.go')
-rw-r--r-- | internal/httpclient/queue_test.go | 106 |
1 files changed, 0 insertions, 106 deletions
diff --git a/internal/httpclient/queue_test.go b/internal/httpclient/queue_test.go deleted file mode 100644 index c6d6ad324..000000000 --- a/internal/httpclient/queue_test.go +++ /dev/null @@ -1,106 +0,0 @@ -/* - GoToSocial - Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. -*/ - -package httpclient - -import ( - "net/http" - "testing" - "time" - - "github.com/stretchr/testify/suite" -) - -type QueueTestSuite struct { - suite.Suite -} - -func (suite *QueueTestSuite) TestQueue() { - maxOpenConns := 5 - waitTimeout := 1 * time.Second - - rc := &requestQueue{ - maxOpenConns: maxOpenConns, - } - - // fill all the open connections - var release func() - for i, n := range make([]interface{}, maxOpenConns) { - w, r := rc.getWaitSpot("example.org", http.MethodPost) - w <- n - if i == maxOpenConns-1 { - // save the last release function - release = r - } - } - - // try to wait again for the same host/method combo, it should timeout - waitAgain, _ := rc.getWaitSpot("example.org", "post") - - select { - case waitAgain <- struct{}{}: - suite.FailNow("first wait did not time out") - case <-time.After(waitTimeout): - break - } - - // now close the final release that we derived earlier - release() - - // try waiting again, it should work this time - select { - case waitAgain <- struct{}{}: - break - case <-time.After(waitTimeout): - suite.FailNow("second wait timed out") - } - - // the POST queue is now sitting on full - suite.Len(waitAgain, maxOpenConns) - - // we should still be able to make a GET for the same host though - getWait, getRelease := rc.getWaitSpot("example.org", http.MethodGet) - select { - case getWait <- struct{}{}: - break - case <-time.After(waitTimeout): - suite.FailNow("get wait timed out") - } - - // the GET queue has one request waiting - suite.Len(getWait, 1) - // clear it... - getRelease() - suite.Empty(getWait) - - // even though the POST queue for example.org is full, we - // should still be able to make a POST request to another host :) - waitForAnotherHost, _ := rc.getWaitSpot("somewhere.else", http.MethodPost) - select { - case waitForAnotherHost <- struct{}{}: - break - case <-time.After(waitTimeout): - suite.FailNow("get wait timed out") - } - - suite.Len(waitForAnotherHost, 1) -} - -func TestQueueTestSuite(t *testing.T) { - suite.Run(t, &QueueTestSuite{}) -} |