summary refs log tree commit diff stats
path: root/svc
diff options
context:
space:
mode:
Diffstat (limited to 'svc')
-rw-r--r--svc/cache_test.go90
-rw-r--r--svc/init_test.go40
2 files changed, 113 insertions, 17 deletions
diff --git a/svc/cache_test.go b/svc/cache_test.go
index 8b9b06d..8702a83 100644
--- a/svc/cache_test.go
+++ b/svc/cache_test.go
@@ -1,11 +1,54 @@
 package svc // import "github.com/getwtxt/getwtxt/svc"
 
 import (
+	"bytes"
+	"html/template"
+	"io/ioutil"
+	"os"
+	"reflect"
 	"testing"
 
 	"github.com/getwtxt/registry"
 )
 
+func Test_initTemplates(t *testing.T) {
+	initTestConf()
+
+	tmpls = initTemplates()
+	manual := template.Must(template.ParseFiles("../assets/tmpl/index.html"))
+
+	t.Run("Checking if Deeply Equal", func(t *testing.T) {
+		if !reflect.DeepEqual(tmpls, manual) {
+			t.Errorf("Returned template doesn't match manual parse\n")
+		}
+	})
+}
+
+func Test_cacheUpdate(t *testing.T) {
+	initTestConf()
+	mockRegistry()
+	killStatuses()
+
+	cacheUpdate()
+	urls := "https://gbmor.dev/twtxt.txt"
+	newStatus := twtxtCache.Users[urls].Status
+
+	t.Run("Checking for any data", func(t *testing.T) {
+
+		if len(newStatus) <= 1 {
+			t.Errorf("Statuses weren't pulled\n")
+		}
+	})
+	t.Run("Checking if Deeply Equal", func(t *testing.T) {
+		raw, _, _ := registry.GetTwtxt(urls)
+		manual, _ := registry.ParseUserTwtxt(raw, "gbmor", urls)
+
+		if !reflect.DeepEqual(newStatus, manual) {
+			t.Errorf("Updated statuses don't match a manual fetch.\n")
+		}
+	})
+}
+
 func Benchmark_cacheUpdate(b *testing.B) {
 	initTestConf()
 	mockRegistry()
@@ -19,19 +62,50 @@ func Benchmark_cacheUpdate(b *testing.B) {
 		// of its performance in both cases.
 		if i > 2 && i%2 == 0 {
 			b.StopTimer()
-			twtxtCache.Mu.Lock()
-			user := twtxtCache.Users["https://gbmor.dev/twtxt.txt"]
-			user.Mu.Lock()
-			user.Status = registry.NewTimeMap()
-			user.RLen = "0"
-			twtxtCache.Users["https://gbmor.dev/twtxt.txt"] = user
-			user.Mu.Unlock()
-			twtxtCache.Mu.Unlock()
+			killStatuses()
 			b.StartTimer()
 		}
 	}
 }
 
+func Test_pingAssets(t *testing.T) {
+	initTestConf()
+	tmpls = initTemplates()
+
+	b := []byte{}
+	buf := bytes.NewBuffer(b)
+
+	cssStat, _ := os.Stat("../assets/style.css")
+	css, _ := ioutil.ReadFile("../assets/style.css")
+	indStat, _ := os.Stat("../assets/tmpl/index.html")
+	tmpls.ExecuteTemplate(buf, "index.html", confObj.Instance)
+	ind := buf.Bytes()
+
+	pingAssets()
+
+	t.Run("Checking if index Deeply Equal", func(t *testing.T) {
+		if !reflect.DeepEqual(staticCache.index, ind) {
+			t.Errorf("Index not equivalent to manual parse\n")
+		}
+	})
+	t.Run("Checking index Mod Times", func(t *testing.T) {
+		if indStat.ModTime() != staticCache.indexMod {
+			t.Errorf("Index mod time mismatch\n")
+		}
+	})
+	t.Run("Checking if CSS Deeply Equal", func(t *testing.T) {
+		if !reflect.DeepEqual(staticCache.css, css) {
+			t.Errorf("CSS not equivalent to manual read\n")
+		}
+	})
+	t.Run("Checking CSS Mod Times", func(t *testing.T) {
+		if cssStat.ModTime() != staticCache.cssMod {
+			t.Errorf("CSS mod time mismatch\n")
+		}
+	})
+
+}
+
 func Benchmark_pingAssets(b *testing.B) {
 	initTestConf()
 	b.ResetTimer()
diff --git a/svc/init_test.go b/svc/init_test.go
index 8b68839..7ddd563 100644
--- a/svc/init_test.go
+++ b/svc/init_test.go
@@ -16,6 +16,7 @@ var (
 	testport     string
 	initTestOnce sync.Once
 	initDBOnce   sync.Once
+	initPersOnce sync.Once
 )
 
 func initTestConf() {
@@ -38,6 +39,12 @@ func initTestDB() {
 	})
 }
 
+func initTestPers() {
+	initPersOnce.Do(func() {
+		initPersistence()
+	})
+}
+
 func logToNull() {
 	hush, err := os.Open("/dev/null")
 	if err != nil {
@@ -47,17 +54,20 @@ func logToNull() {
 }
 
 func testConfig() {
-
 	viper.SetConfigName("getwtxt")
 	viper.SetConfigType("yml")
-	viper.AddConfigPath("..")
+	viper.AddConfigPath("../")
 
+	viper.SetDefault("BehindProxy", true)
+	viper.SetDefault("UseTLS", false)
+	viper.SetDefault("TLSCert", "/etc/ssl/getwtxt.pem")
+	viper.SetDefault("TLSKey", "/etc/ssl/private/getwtxt.pem")
 	viper.SetDefault("ListenPort", 9001)
 	viper.SetDefault("DatabasePath", "getwtxt.db")
 	viper.SetDefault("AssetsDirectory", "assets")
 	viper.SetDefault("DatabaseType", "leveldb")
-	viper.SetDefault("ReCacheInterval", "1h")
-	viper.SetDefault("DatabasePushInterval", "5m")
+	viper.SetDefault("ReCacheInterval", "9m")
+	viper.SetDefault("DatabasePushInterval", "4m")
 	viper.SetDefault("Instance.SiteName", "getwtxt")
 	viper.SetDefault("Instance.OwnerName", "Anonymous Microblogger")
 	viper.SetDefault("Instance.Email", "nobody@knows")
@@ -69,15 +79,10 @@ func testConfig() {
 
 	confObj.Port = viper.GetInt("ListenPort")
 	confObj.AssetsDir = "../" + viper.GetString("AssetsDirectory")
-
 	confObj.DBType = strings.ToLower(viper.GetString("DatabaseType"))
 	confObj.DBPath = viper.GetString("DatabasePath")
-	log.Printf("Using %v database: %v\n", confObj.DBType, confObj.DBPath)
-
 	confObj.CacheInterval = viper.GetDuration("StatusFetchInterval")
-	log.Printf("User status fetch interval: %v\n", confObj.CacheInterval)
 	confObj.DBInterval = viper.GetDuration("DatabasePushInterval")
-	log.Printf("Database push interval: %v\n", confObj.DBInterval)
 
 	confObj.Instance.Vers = Vers
 	confObj.Instance.Name = viper.GetString("Instance.SiteName")
@@ -87,9 +92,26 @@ func testConfig() {
 	confObj.Instance.Desc = viper.GetString("Instance.Description")
 }
 
+// Creates a fresh mock registry, with a single
+// user and their statuses, for testing.
 func mockRegistry() {
 	twtxtCache = registry.NewIndex()
 	statuses, _, _ := registry.GetTwtxt("https://gbmor.dev/twtxt.txt")
 	parsed, _ := registry.ParseUserTwtxt(statuses, "gbmor", "https://gbmor.dev/twtxt.txt")
 	_ = twtxtCache.AddUser("gbmor", "https://gbmor.dev/twtxt.txt", "1", net.ParseIP("127.0.0.1"), parsed)
 }
+
+// Empties the mock registry's user of statuses
+// for functions that test status modifications
+func killStatuses() {
+	twtxtCache.Mu.Lock()
+	user := twtxtCache.Users["https://gbmor.dev/twtxt.txt"]
+	user.Mu.Lock()
+
+	user.Status = registry.NewTimeMap()
+	user.RLen = "0"
+	twtxtCache.Users["https://gbmor.dev/twtxt.txt"] = user
+
+	user.Mu.Unlock()
+	twtxtCache.Mu.Unlock()
+}
kkartik/mu/commit/html/000organization.cc.html?h=hlt&id=65361948ca7975553757a0e0df4ac7352413044c'>65361948 ^
672e3e50 ^


db1f56c8 ^
672e3e50 ^




65361948 ^






4690ce81 ^
672e3e50 ^


4690ce81 ^
672e3e50 ^

672e3e50 ^


a654e4ec ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163