package icinga2

import (
	"encoding/json"
	"testing"

	"github.com/influxdata/telegraf/testutil"
)

func TestGatherServicesStatus(t *testing.T) {

	s := `{"results":[
    {
      "attrs": {
        "check_command": "check-bgp-juniper-netconf",
        "display_name": "eq-par.dc2.fr",
        "name": "ef017af8-c684-4f3f-bb20-0dfe9fcd3dbe",
        "state": 0
      },
      "joins": {},
      "meta": {},
      "name": "eq-par.dc2.fr!ef017af8-c684-4f3f-bb20-0dfe9fcd3dbe",
      "type": "Service"
    }
  ]}`

	checks := Result{}
	json.Unmarshal([]byte(s), &checks)
	fields := map[string]interface{}{
		"name":       "ef017af8-c684-4f3f-bb20-0dfe9fcd3dbe",
		"state_code": 0,
	}
	tags := map[string]string{
		"display_name":  "eq-par.dc2.fr",
		"check_command": "check-bgp-juniper-netconf",
		"state":         "ok",
		"source":        "localhost",
		"port":          "5665",
		"scheme":        "https",
	}

	var acc testutil.Accumulator

	icinga2 := new(Icinga2)
	icinga2.ObjectType = "services"
	icinga2.Server = "https://localhost:5665"
	icinga2.GatherStatus(&acc, checks.Results)
	acc.AssertContainsTaggedFields(t, "icinga2_services", fields, tags)
}

func TestGatherHostsStatus(t *testing.T) {

	s := `{"results":[
    {
      "attrs": {
				"name": "webserver",
        "address": "192.168.1.1",
        "check_command": "ping",
        "display_name": "apache",
        "state": 2
      },
      "joins": {},
      "meta": {},
      "name": "webserver",
      "type": "Host"
    }
  ]}`

	checks := Result{}
	json.Unmarshal([]byte(s), &checks)
	fields := map[string]interface{}{
		"name":       "webserver",
		"state_code": 2,
	}
	tags := map[string]string{
		"display_name":  "apache",
		"check_command": "ping",
		"state":         "critical",
		"source":        "localhost",
		"port":          "5665",
		"scheme":        "https",
	}

	var acc testutil.Accumulator

	icinga2 := new(Icinga2)
	icinga2.ObjectType = "hosts"
	icinga2.Server = "https://localhost:5665"
	icinga2.GatherStatus(&acc, checks.Results)
	acc.AssertContainsTaggedFields(t, "icinga2_hosts", fields, tags)
}