Adding unit tests for retrieve

This commit is contained in:
Farhan Khan 2021-09-30 00:29:40 +00:00
parent 07ac559a0a
commit e43dc9a909
2 changed files with 53 additions and 9 deletions

View File

@ -162,16 +162,22 @@ func check_activity(uri string) {
}
func check_actor(uri string) {
/* Test: TestCheck_actor */
func check_actor(uri string) int {
var actorjson ActorJson
if len(uri) <= 7 {
return 400 // Bad actor
}
endslash := strings.Index(uri[8:], "/")
if endslash == -1 {
return
return 400 // Bad actor
}
actorjson.instance = uri[8 : endslash+8]
for _, banned := range settings.Banned {
if strings.Index(uri, "https://"+banned+"/") == 0 {
return
return 401 // Banned actor
}
}
@ -180,14 +186,14 @@ func check_actor(uri string) {
o.recentactors.Mu.Lock()
if o.recentactors.Add(uri) == true {
o.recentactors.Mu.Unlock()
return
return 402 // Actor in recent queue, good!
}
o.recentactors.Mu.Unlock()
selectRet := pool.QueryRow(context.Background(), "SELECT FROM actors WHERE document->>'id' = $1", uri)
err := selectRet.Scan()
if err == nil {
return
return 403 // Actor already in database, good!
}
req, _ := http.NewRequest("GET", uri, nil)
@ -201,7 +207,7 @@ func check_actor(uri string) {
if err != nil {
if tries > 10 {
logErr("Unable to connect to "+uri+" attempt 10/10, giving up.")
return
return 404 // Unable to connect to host after 10 attempts
}
logWarn("Unable to connect to "+uri+", attempt ",tries+1,"+/10 sleeping for 30 seconds.")
time.Sleep(time.Second * 30)
@ -213,7 +219,7 @@ func check_actor(uri string) {
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return
return 405 // Unable to read body of message
}
resp.Body.Close()
@ -221,13 +227,14 @@ func check_actor(uri string) {
err = json.Unmarshal(body, &actorjson)
if err != nil {
return
return 406 // Unable to unmarshal body of message
}
_, err = pool.Exec(context.Background(), "INSERT INTO actors (document, instance) VALUES($1, $2)", jsondocument, actorjson.instance)
if err != nil {
logWarn("Error inserting %s into `actors`: "+uri, err)
return
return 407 // Unable to insert actor
}
return 0 // Successful
}

View File

@ -0,0 +1,37 @@
package main
import (
"testing"
)
func TestCheck_actor(t *testing.T) {
defer func() {
}()
// Start of Setup
settings.Banned = append(settings.Banned, "banneddomain.com")
o, _ := GetRunner("validdomain.com")
q := o.recentactors.Add("https://validdomain.com/users/validuser")
AssertEqual(t, q, false) // A setup test
// End of Setup
// initialize haves
have1 := check_actor("meaninglessvalue")
have0 := check_actor("")
have2 := check_actor("https://banneddomain.com/users/banneduser")
have3 := check_actor("https://validdomain.com/users/validuser")
// test wants
// Short user
AssertEqual(t, have0, 400)
// Invalid user
AssertEqual(t, have1, 400)
// Banned instance
AssertEqual(t, have2, 401)
// User already present
AssertEqual(t, have3, 402)
}