diff_test.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package kubecost
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/google/go-cmp/cmp"
  6. )
  7. func TestDiff(t *testing.T) {
  8. start := time.Now().AddDate(0, 0, -1)
  9. end := time.Now()
  10. window1 := NewWindow(&start, &end)
  11. node1 := NewNode("node1", "cluster1", "123abc", start, end, window1)
  12. node2 := NewNode("node2", "cluster1", "123abc", start, end, window1)
  13. node3 := NewNode("node3", "cluster1", "123abc", start, end, window1)
  14. node4 := NewNode("node4", "cluster1", "123abc", start, end, window1)
  15. disk1 := NewDisk("disk1", "cluster1", "123abc", start, end, window1)
  16. disk2 := NewDisk("disk2", "cluster1", "123abc", start, end, window1)
  17. cases := map[string]struct {
  18. inputAssetsBefore []Asset
  19. inputAssetsAfter []Asset
  20. expected []Diff
  21. }{
  22. "added node": {inputAssetsBefore: []Asset{node1, node2}, inputAssetsAfter: []Asset{node1, node2, node3}, expected: []Diff{{node3, "added"}}},
  23. "multiple adds": {inputAssetsBefore: []Asset{node1, node2}, inputAssetsAfter: []Asset{node1, node2, node3, node4}, expected: []Diff{{node3, "added"}, {node4, "added"}}},
  24. "removed node": {inputAssetsBefore: []Asset{node1, node2}, inputAssetsAfter: []Asset{node2}, expected: []Diff{{node1, "removed"}}},
  25. "multiple removes": {inputAssetsBefore: []Asset{node1, node2, node3}, inputAssetsAfter: []Asset{node2}, expected: []Diff{{node1, "removed"}, {node3, "removed"}}},
  26. "remove all": {inputAssetsBefore: []Asset{node1, node2}, inputAssetsAfter: []Asset{}, expected: []Diff{{node1, "removed"}, {node2, "removed"}}},
  27. "add and remove": {inputAssetsBefore: []Asset{node1, node2}, inputAssetsAfter: []Asset{node2, node3}, expected: []Diff{{node1, "removed"}, {node3, "added"}}},
  28. "no change": {inputAssetsBefore: []Asset{node1, node2}, inputAssetsAfter: []Asset{node1, node2}, expected: []Diff{}},
  29. "order switch": {inputAssetsBefore: []Asset{node2, node1}, inputAssetsAfter: []Asset{node1, node2}, expected: []Diff{}},
  30. "disk add": {inputAssetsBefore: []Asset{disk1, node1}, inputAssetsAfter: []Asset{disk1, node1, disk2}, expected: []Diff{{disk2, "added"}}},
  31. "disk and node add": {inputAssetsBefore: []Asset{disk1, node1}, inputAssetsAfter: []Asset{disk1, node1, disk2, node2}, expected: []Diff{{disk2, "added"}, {node2, "added"}}},
  32. "disk and node removed": {inputAssetsBefore: []Asset{disk1, node1, disk2, node2}, inputAssetsAfter: []Asset{disk2, node2}, expected: []Diff{{disk1, "removed"}, {node1, "removed"}}},
  33. }
  34. for name, tc := range cases {
  35. t.Run(name, func(t *testing.T) {
  36. as1 := NewAssetSet(start, end, tc.inputAssetsBefore...)
  37. as2 := NewAssetSet(start, end, tc.inputAssetsAfter...)
  38. result := DiffAsset(as1.Clone(), as2.Clone())
  39. diff := cmp.Diff(tc.expected, result)
  40. if diff != "" {
  41. t.Fatalf(diff)
  42. }
  43. })
  44. }
  45. // as1 := NewAssetSet(start, end,
  46. // NewNode("node1", "cluster1", "123abc", start, end, window1),
  47. // NewNode("node2", "cluster1", "123abc", start, end, window1)
  48. // NewNode("node3", "cluster1", "123abc", start, end, window1))
  49. // as2 := NewAssetSet(start, end,
  50. // NewNode("node2", "cluster1", "123abc", start, end, window1),
  51. // NewNode("node4", "cluster1", "123abc", start, end, window1))
  52. // t.Logf("testing")
  53. // result := DiffAsset(as1, as2)
  54. // for i := range result {
  55. // t.Logf("%+v", result[i])
  56. // }
  57. }