summary refs log blame commit diff stats
path: root/svc/init_test.go
blob: 8fd8e95d61214086d3e043db0ef16b81974bf00e (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                      


             
                       

             
                 
              

              
                                

 




                              
 
                     
                                
 

                                       
                                          

                                  
                                          
                                                           
 
                           
          

 





                              






                                         










                                                                              
                                            


                                                      

                                                      






                                                                                                          
                                 

                                                 
                                                                      

                                                                         


                                                                             

                                                                             












                                                                       
 
package svc // import "github.com/getwtxt/getwtxt/svc"

import (
	"fmt"
	"html/template"
	"log"
	"os"
	"strings"
	"sync"
	"time"

	"github.com/spf13/viper"
)

var (
	testport     string
	initTestOnce sync.Once
	initDBOnce   sync.Once
)

func initTestConf() {
	initTestOnce.Do(func() {

		testConfig()
		tmpls = testTemplates()
		staticCache = initAssets()

		confObj.Mu.RLock()
		defer confObj.Mu.RUnlock()
		testport = fmt.Sprintf(":%v", confObj.Port)

		logToNull()
	})
}

func initTestDB() {
	initDBOnce.Do(func() {
		initDatabase()
	})
}

func logToNull() {
	hush, err := os.Open("/dev/null")
	if err != nil {
		log.Printf("%v\n", err)
	}
	log.SetOutput(hush)
}

func testTemplates() *template.Template {
	return template.Must(template.ParseFiles("../assets/tmpl/index.html"))
}

func testConfig() {

	viper.SetConfigName("getwtxt")
	viper.SetConfigType("yml")
	viper.AddConfigPath("..")

	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("Instance.SiteName", "getwtxt")
	viper.SetDefault("Instance.OwnerName", "Anonymous Microblogger")
	viper.SetDefault("Instance.Email", "nobody@knows")
	viper.SetDefault("Instance.URL", "https://twtxt.example.com")
	viper.SetDefault("Instance.Description", "A fast, resilient twtxt registry server written in Go!")

	confObj.Mu.Lock()
	defer confObj.Mu.Unlock()

	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.LastCache = time.Now()
	confObj.LastPush = time.Now()
	confObj.Version = getwtxt

	confObj.Instance.Vers = getwtxt
	confObj.Instance.Name = viper.GetString("Instance.SiteName")
	confObj.Instance.URL = viper.GetString("Instance.URL")
	confObj.Instance.Owner = viper.GetString("Instance.OwnerName")
	confObj.Instance.Mail = viper.GetString("Instance.Email")
	confObj.Instance.Desc = viper.GetString("Instance.Description")
}