package config_manager_go

import (
	"testing"
	"github.com/stretchr/testify/assert"
	"io/ioutil"
	"log"
	"loafle.com/overflow/agent_api/config_manager"
	"encoding/json"
	"github.com/google/uuid"
	"loafle.com/overflow/agent_api/observer"
	"loafle.com/overflow/agent_api/observer/messages"
	"time"
)

func TestLoadConfig(t *testing.T) {
	
	// notify temp channel
	ch := make(chan interface{},0)
	observer.Add(messages.CFG_LOADED,ch)
	go func() {
		data :=<- ch
		c := data.(config_manager.ConfigManager)
		cc := c.GetSensors()
		assert.NotEqual(t, len(cc),0)
	}()
	
	// make config manager after to load
	c := NewConfigManager()
	c.loadGlobalConfig("/root/gowork/src/loafle.com/overflow/config_manager_go/test_agent/global.yaml")
	c.loadCrawlerConfigAll()
	
	assert.NotEqual(t, len(c.configs),0)
	observer.Notify(messages.CFG_LOADED,c)
	time.Sleep(1 * time.Second)
}


func TestAddConfig(t *testing.T) {
	_configManager.loadGlobalConfig("/root/gowork/src/loafle.com/overflow/config_manager_go/test_agent/global.yaml")
	
	// 원본 테스트 설정 파일 로드
	b, err := ioutil.ReadFile("/root/gowork/src/loafle.com/overflow/config_manager_go/test_agent/test.json")
	if err != nil {
		log.Panic(err)
	}
	var m = config_manager.Config{}
	json.Unmarshal(b, &m)
	
	// uuid로 원본 파일 복제
	rid,_ := uuid.NewRandom()
	m.Id = rid.String()
	b,err = json.Marshal(&m)
	ioutil.WriteFile("/root/gowork/src/loafle.com/overflow/config_manager_go/test_agent/" + m.Id,b,0644)
	
	// add test
	observer.Notify(messages.TASK_SENSOR_ADD,"/root/gowork/src/loafle.com/overflow/config_manager_go/test_agent/" + m.Id)
	time.Sleep(1 * time.Second)
}


func TestRemoveConfig(t *testing.T) {
	
	_configManager.loadGlobalConfig("/root/gowork/src/loafle.com/overflow/config_manager_go/test_agent/global.yaml")
	_configManager.loadCrawlerConfigAll()
	
	// remove test
	observer.Notify(messages.TASK_SENSOR_REMOVE,"d0fcc7b1-43a7-4acd-a7bf-c9572a9d4c9e")
	time.Sleep(1 * time.Second)
}
