remote_cluster_test.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package costmodel_test
  2. import (
  3. "log"
  4. "net"
  5. "net/http"
  6. "os"
  7. "testing"
  8. "time"
  9. "github.com/kubecost/cost-model/cloud"
  10. costModel "github.com/kubecost/cost-model/costmodel"
  11. "gotest.tools/assert"
  12. prometheusClient "github.com/prometheus/client_golang/api"
  13. _ "k8s.io/client-go/plugin/pkg/client/auth"
  14. )
  15. func TestClusterConvergence(t *testing.T) {
  16. rclient, err := getKubernetesClient()
  17. if err != nil {
  18. panic(err)
  19. }
  20. var LongTimeoutRoundTripper http.RoundTripper = &http.Transport{ // may be necessary for long prometheus queries. TODO: make this configurable
  21. Proxy: http.ProxyFromEnvironment,
  22. DialContext: (&net.Dialer{
  23. Timeout: 120 * time.Second,
  24. KeepAlive: 120 * time.Second,
  25. }).DialContext,
  26. TLSHandshakeTimeout: 10 * time.Second,
  27. }
  28. pc := prometheusClient.Config{
  29. Address: address,
  30. RoundTripper: LongTimeoutRoundTripper,
  31. }
  32. promCli, err := prometheusClient.NewClient(pc)
  33. if err != nil {
  34. panic(err)
  35. }
  36. cm := costModel.NewCostModel(rclient)
  37. provider := &cloud.CustomProvider{
  38. Clientset: rclient,
  39. }
  40. loc, _ := time.LoadLocation("UTC")
  41. endTime := time.Now().In(loc)
  42. d, _ := time.ParseDuration("24h")
  43. startTime := endTime.Add(-1 * d)
  44. layout := "2006-01-02T15:04:05.000Z"
  45. startStr := startTime.Format(layout)
  46. endStr := endTime.Format(layout)
  47. log.Printf("Starting at %s \n", startStr)
  48. log.Printf("Ending at %s \n", endStr)
  49. provider.DownloadPricingData()
  50. data, err := cm.ComputeCostDataRange(promCli, rclient, provider, startStr, endStr, "1h", "", false)
  51. if err != nil {
  52. panic(err)
  53. }
  54. os.Setenv("SQL_ADDRESS", "ab5cfc235d64e11e9b8280265f54018f-778641917.us-east-2.elb.amazonaws.com")
  55. os.Setenv("REMOTE_WRITE_PASSWORD", "savemoney123")
  56. data2, err := cm.ComputeCostDataRange(promCli, rclient, provider, startStr, endStr, "1h", "", true)
  57. if err != nil {
  58. panic(err)
  59. }
  60. agg := costModel.AggregateCostModel(data, 0.0, 1.0, nil, "namespace", "")
  61. agg2 := costModel.AggregateCostModel(data2, 0.0, 1.0, nil, "namespace", "")
  62. assert.Equal(t, agg["kubecost"].TotalCost, agg2["kubecost"].TotalCost)
  63. }