Activity-Relay/State/state_test.go
2020-01-02 01:26:43 +09:00

247 lines
5.2 KiB
Go

package state
import (
"fmt"
"os"
"testing"
"github.com/go-redis/redis"
"github.com/spf13/viper"
)
var redisClient *redis.Client
func TestMain(m *testing.M) {
viper.SetConfigName("config")
viper.AddConfigPath(".")
err := viper.ReadInConfig()
if err != nil {
fmt.Println("Config file is not exists. Use environment variables.")
viper.BindEnv("redis_url")
}
redisOption, err := redis.ParseURL(viper.GetString("redis_url"))
if err != nil {
panic(err)
}
redisClient = redis.NewClient(redisOption)
code := m.Run()
os.Exit(code)
redisClient.FlushAll().Result()
}
func TestLoadEmpty(t *testing.T) {
redisClient.FlushAll().Result()
testState := NewState(redisClient, false)
if testState.RelayConfig.BlockService != false {
t.Fatalf("Failed read config.")
}
if testState.RelayConfig.CreateAsAnnounce != false {
t.Fatalf("Failed read config.")
}
if testState.RelayConfig.ManuallyAccept != false {
t.Fatalf("Failed read config.")
}
redisClient.FlushAll().Result()
}
func TestSetConfig(t *testing.T) {
ch := make(chan bool)
redisClient.FlushAll().Result()
testState := NewState(redisClient, true)
testState.ListenNotify(ch)
testState.SetConfig(BlockService, true)
<-ch
if testState.RelayConfig.BlockService != true {
t.Fatalf("Failed enable config.")
}
testState.SetConfig(CreateAsAnnounce, true)
<-ch
if testState.RelayConfig.CreateAsAnnounce != true {
t.Fatalf("Failed enable config.")
}
testState.SetConfig(ManuallyAccept, true)
<-ch
if testState.RelayConfig.ManuallyAccept != true {
t.Fatalf("Failed enable config.")
}
testState.SetConfig(BlockService, false)
<-ch
if testState.RelayConfig.BlockService != false {
t.Fatalf("Failed disable config.")
}
testState.SetConfig(CreateAsAnnounce, false)
<-ch
if testState.RelayConfig.CreateAsAnnounce != false {
t.Fatalf("Failed disable config.")
}
testState.SetConfig(ManuallyAccept, false)
<-ch
if testState.RelayConfig.ManuallyAccept != false {
t.Fatalf("Failed disable config.")
}
redisClient.FlushAll().Result()
}
func TestTreatSubscriptionNotify(t *testing.T) {
ch := make(chan bool)
redisClient.FlushAll().Result()
testState := NewState(redisClient, true)
testState.ListenNotify(ch)
testState.AddSubscription(Subscription{
Domain: "example.com",
InboxURL: "https://example.com/inbox",
})
<-ch
valid := false
for _, domain := range testState.Subscriptions {
if domain.Domain == "example.com" && domain.InboxURL == "https://example.com/inbox" {
valid = true
}
}
if !valid {
t.Fatalf("Failed write config.")
}
testState.DelSubscription("example.com")
<-ch
for _, domain := range testState.Subscriptions {
if domain.Domain == "example.com" {
valid = false
}
}
if !valid {
t.Fatalf("Failed write config.")
}
redisClient.FlushAll().Result()
}
func TestSelectDomain(t *testing.T) {
ch := make(chan bool)
redisClient.FlushAll().Result()
testState := NewState(redisClient, true)
testState.ListenNotify(ch)
exampleSubscription := Subscription{
Domain: "example.com",
InboxURL: "https://example.com/inbox",
}
testState.AddSubscription(exampleSubscription)
<-ch
subscription := testState.SelectSubscription("example.com")
if *subscription != exampleSubscription {
t.Fatalf("Failed select domain.")
}
subscription = testState.SelectSubscription("example.org")
if subscription != nil {
t.Fatalf("Failed select domain.")
}
redisClient.FlushAll().Result()
}
func TestBlockedDomain(t *testing.T) {
ch := make(chan bool)
redisClient.FlushAll().Result()
testState := NewState(redisClient, true)
testState.ListenNotify(ch)
testState.SetBlockedDomain("example.com", true)
<-ch
valid := false
for _, domain := range testState.BlockedDomains {
if domain == "example.com" {
valid = true
}
}
if !valid {
t.Fatalf("Failed write config.")
}
testState.SetBlockedDomain("example.com", false)
<-ch
for _, domain := range testState.BlockedDomains {
if domain == "example.com" {
valid = false
}
}
if !valid {
t.Fatalf("Failed write config.")
}
redisClient.FlushAll().Result()
}
func TestLimitedDomain(t *testing.T) {
ch := make(chan bool)
redisClient.FlushAll().Result()
testState := NewState(redisClient, true)
testState.ListenNotify(ch)
testState.SetLimitedDomain("example.com", true)
<-ch
valid := false
for _, domain := range testState.LimitedDomains {
if domain == "example.com" {
valid = true
}
}
if !valid {
t.Fatalf("Failed write config.")
}
testState.SetLimitedDomain("example.com", false)
<-ch
for _, domain := range testState.LimitedDomains {
if domain == "example.com" {
valid = false
}
}
if !valid {
t.Fatalf("Failed write config.")
}
redisClient.FlushAll().Result()
}
func TestLoadCompatiSubscription(t *testing.T) {
redisClient.FlushAll().Result()
testState := NewState(redisClient, false)
testState.AddSubscription(Subscription{
Domain: "example.com",
InboxURL: "https://example.com/inbox",
})
testState.RedisClient.HDel("relay:subscription:example.com", "activity_id", "actor_id")
testState.Load()
valid := false
for _, domain := range testState.Subscriptions {
if domain.Domain == "example.com" && domain.InboxURL == "https://example.com/inbox" {
valid = true
}
}
if !valid {
t.Fatalf("Failed load compati config.")
}
redisClient.FlushAll().Result()
}