github.com/scaleway/scaleway-cli@v1.11.1/pkg/pricing/basket_test.go (about) 1 package pricing 2 3 import ( 4 "math/big" 5 "testing" 6 "time" 7 8 . "github.com/smartystreets/goconvey/convey" 9 ) 10 11 func TestNewBasket(t *testing.T) { 12 Convey("Testing NewBasket()", t, func() { 13 basket := NewBasket() 14 So(basket, ShouldNotBeNil) 15 So(basket.Length(), ShouldEqual, 0) 16 }) 17 } 18 19 func TestBasket_Add(t *testing.T) { 20 Convey("Testing Basket.Add", t, FailureContinues, func() { 21 basket := NewBasket() 22 So(basket, ShouldNotBeNil) 23 So(basket.Length(), ShouldEqual, 0) 24 25 err := basket.Add(NewUsageByPathWithQuantity("/compute/c1/run", big.NewRat(1, 1))) 26 So(err, ShouldBeNil) 27 So(basket.Length(), ShouldEqual, 1) 28 29 err = basket.Add(NewUsageByPathWithQuantity("/compute/c1/run", big.NewRat(42, 1))) 30 So(err, ShouldBeNil) 31 So(basket.Length(), ShouldEqual, 2) 32 33 err = basket.Add(NewUsageByPathWithQuantity("/compute/c1/run", big.NewRat(600, 1))) 34 So(err, ShouldBeNil) 35 So(basket.Length(), ShouldEqual, 3) 36 }) 37 } 38 39 func TestBasket_Total(t *testing.T) { 40 Convey("Testing Basket.Total", t, FailureContinues, func() { 41 Convey("3 compute instances", func() { 42 basket := NewBasket() 43 So(basket, ShouldNotBeNil) 44 So(basket.Total(), ShouldEqualBigRat, ratZero) 45 46 err := basket.Add(NewUsageByPathWithQuantity("/compute/c1/run", big.NewRat(1, 1))) 47 So(err, ShouldBeNil) 48 So(basket.Total(), ShouldEqualBigRat, big.NewRat(2, 1000)) // 0.002 49 50 err = basket.Add(NewUsageByPathWithQuantity("/compute/c1/run", big.NewRat(42, 1))) 51 So(err, ShouldBeNil) 52 So(basket.Total(), ShouldEqualBigRat, big.NewRat(4, 1000)) // 0.004 53 54 err = basket.Add(NewUsageByPathWithQuantity("/compute/c1/run", big.NewRat(600, 1))) 55 So(err, ShouldBeNil) 56 So(basket.Total(), ShouldEqualBigRat, big.NewRat(24, 1000)) // 0.024 57 }) 58 Convey("1 server of each type", func() { 59 basket := NewBasket() 60 So(basket, ShouldNotBeNil) 61 So(basket.Total(), ShouldEqualBigRat, ratZero) 62 63 basket.Add(NewUsageByPath("/compute/c1/run")) 64 basket.Add(NewUsageByPath("/compute/c2s/run")) 65 basket.Add(NewUsageByPath("/compute/c2m/run")) 66 basket.Add(NewUsageByPath("/compute/c2l/run")) 67 basket.Add(NewUsageByPath("/compute/vc1s/run")) 68 basket.Add(NewUsageByPath("/compute/vc1m/run")) 69 basket.Add(NewUsageByPath("/compute/vc1l/run")) 70 71 basket.SetDuration(1 * time.Minute) 72 So(basket.Total(), ShouldEqualBigRat, big.NewRat(116, 1000)) // 0.116 73 74 basket.SetDuration(1 * time.Hour) 75 So(basket.Total(), ShouldEqualBigRat, big.NewRat(116, 1000)) // 0.116 76 77 basket.SetDuration(2 * time.Hour) 78 So(basket.Total(), ShouldEqualBigRat, big.NewRat(232, 1000)) // 0.232 79 80 basket.SetDuration(24 * time.Hour) 81 So(basket.Total(), ShouldEqualBigRat, big.NewRat(2784, 1000)) // 2.784 82 83 basket.SetDuration(30 * 24 * time.Hour) 84 So(basket.Total(), ShouldEqualBigRat, big.NewRat(58000, 1000)) // 58 85 86 // FIXME: this test if false, the capacity is per month 87 basket.SetDuration(365 * 24 * time.Hour) 88 So(basket.Total(), ShouldEqualBigRat, big.NewRat(58000, 1000)) // 58 89 }) 90 Convey("1 compute instance with 2 volumes and 1 ip", func() { 91 basket := NewBasket() 92 93 basket.Add(NewUsageByPath("/compute/c1/run")) 94 basket.Add(NewUsageByPath("/ip/dynamic")) 95 basket.Add(NewUsageByPath("/storage/local/ssd/storage")) 96 basket.Add(NewUsageByPath("/storage/local/ssd/storage")) 97 So(basket.Length(), ShouldEqual, 4) 98 99 basket.SetDuration(1 * time.Minute) 100 So(basket.Total(), ShouldEqualBigRat, big.NewRat(8, 1000)) // 0.008 101 102 basket.SetDuration(1 * time.Hour) 103 So(basket.Total(), ShouldEqualBigRat, big.NewRat(8, 1000)) // 0.008 104 105 basket.SetDuration(2 * time.Hour) 106 So(basket.Total(), ShouldEqualBigRat, big.NewRat(12, 1000)) // 0.012 107 108 basket.SetDuration(2 * 24 * time.Hour) 109 So(basket.Total(), ShouldEqualBigRat, big.NewRat(196, 1000)) // 0.196 110 111 basket.SetDuration(30 * 24 * time.Hour) 112 So(basket.Total(), ShouldEqualBigRat, big.NewRat(2050, 1000)) // 2.05 113 114 // FIXME: this test is false, the capacity is per month 115 basket.SetDuration(365 * 24 * time.Hour) 116 So(basket.Total(), ShouldEqualBigRat, big.NewRat(2694, 1000)) // 2.694 117 }) 118 }) 119 }