11package pricing
22
33import (
4- "fmt"
54 "math/big"
65 "testing"
6+ "time"
77
88 . "github.com/smartystreets/goconvey/convey"
99)
1010
11- func ShouldEqualBigRat (actual interface {}, expected ... interface {}) string {
12- actualRat := actual .(* big.Rat )
13- expectRat := expected [0 ].(* big.Rat )
14- cmp := actualRat .Cmp (expectRat )
15- if cmp == 0 {
16- return ""
17- }
18-
19- output := fmt .Sprintf ("big.Rat are not matching: %q != %q\n " , actualRat , expectRat )
20-
21- actualFloat64 , _ := actualRat .Float64 ()
22- expectFloat64 , _ := expectRat .Float64 ()
23- output += fmt .Sprintf (" %f != %f" , actualFloat64 , expectFloat64 )
24- return output
25- }
26-
2711func TestNewUsageByPathWithQuantity (t * testing.T ) {
2812 Convey ("Testing NewUsageByPathWithQuantity()" , t , func () {
2913 usage := NewUsageByPathWithQuantity ("/compute/c1/run" , 1 )
@@ -32,6 +16,14 @@ func TestNewUsageByPathWithQuantity(t *testing.T) {
3216 })
3317}
3418
19+ func TestNewUsageByPath (t * testing.T ) {
20+ Convey ("Testing NewUsageByPath()" , t , func () {
21+ usage := NewUsageByPath ("/compute/c1/run" )
22+ So (usage .PricingObject .Path , ShouldEqual , "/compute/c1/run" )
23+ So (usage .Quantity , ShouldEqualBigRat , ratZero )
24+ })
25+ }
26+
3527func TestNewUsageWithQuantity (t * testing.T ) {
3628 Convey ("Testing NewUsageWithQuantity()" , t , func () {
3729 object := CurrentPricing .GetByPath ("/compute/c1/run" )
@@ -41,6 +33,124 @@ func TestNewUsageWithQuantity(t *testing.T) {
4133 })
4234}
4335
36+ func TestUsage_SetStartEnd (t * testing.T ) {
37+ Convey ("Testing Usage.SetStartEnd()" , t , func () {
38+ object := PricingObject {
39+ UsageGranularity : time .Minute ,
40+ }
41+ usage := NewUsage (& object )
42+ layout := "2006-Jan-02 15:04:05"
43+ start , err := time .Parse (layout , "2015-Jan-25 13:15:42" )
44+ So (err , ShouldBeNil )
45+ end , err := time .Parse (layout , "2015-Jan-25 13:16:10" )
46+ So (err , ShouldBeNil )
47+ err = usage .SetStartEnd (start , end )
48+ So (err , ShouldBeNil )
49+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (2 , 1 ))
50+ })
51+ }
52+
53+ func TestUsage_SetDuration (t * testing.T ) {
54+ Convey ("Testing Usage.SetDuration()" , t , FailureContinues , func () {
55+ Convey ("UsageGranularity=time.Minute" , func () {
56+ object := PricingObject {
57+ UsageGranularity : time .Minute ,
58+ }
59+ usage := NewUsage (& object )
60+
61+ err := usage .SetDuration (time .Minute * 10 )
62+ So (err , ShouldBeNil )
63+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (10 , 1 ))
64+
65+ err = usage .SetDuration (time .Minute + time .Second )
66+ So (err , ShouldBeNil )
67+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (2 , 1 ))
68+
69+ err = usage .SetDuration (0 * time .Minute )
70+ So (err , ShouldBeNil )
71+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (0 , 1 ))
72+
73+ err = usage .SetDuration (- 1 * time .Minute )
74+ So (err , ShouldBeNil )
75+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (0 , 1 ))
76+
77+ err = usage .SetDuration (10 * time .Hour + 5 * time .Minute + 10 * time .Second )
78+ So (err , ShouldBeNil )
79+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (60 * 10 + 5 + 1 , 1 ))
80+
81+ err = usage .SetDuration (10 * time .Nanosecond )
82+ So (err , ShouldBeNil )
83+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (1 , 1 ))
84+ })
85+
86+ Convey ("UsageGranularity=time.Hour" , func () {
87+ object := PricingObject {
88+ UsageGranularity : time .Hour ,
89+ }
90+ usage := NewUsage (& object )
91+
92+ err := usage .SetDuration (time .Minute * 10 )
93+ So (err , ShouldBeNil )
94+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (1 , 1 ))
95+
96+ err = usage .SetDuration (time .Minute + time .Second )
97+ So (err , ShouldBeNil )
98+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (1 , 1 ))
99+
100+ err = usage .SetDuration (0 * time .Minute )
101+ So (err , ShouldBeNil )
102+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (0 , 1 ))
103+
104+ err = usage .SetDuration (- 1 * time .Minute )
105+ So (err , ShouldBeNil )
106+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (0 , 1 ))
107+
108+ err = usage .SetDuration (10 * time .Hour + 5 * time .Minute + 10 * time .Second )
109+ So (err , ShouldBeNil )
110+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (11 , 1 ))
111+
112+ err = usage .SetDuration (10 * time .Nanosecond )
113+ So (err , ShouldBeNil )
114+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (1 , 1 ))
115+ })
116+
117+ Convey ("UsageGranularity=time.Hour*24" , func () {
118+ object := PricingObject {
119+ UsageGranularity : time .Hour * 24 ,
120+ }
121+ usage := NewUsage (& object )
122+
123+ err := usage .SetDuration (time .Minute * 10 )
124+ So (err , ShouldBeNil )
125+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (1 , 1 ))
126+
127+ err = usage .SetDuration (time .Minute + time .Second )
128+ So (err , ShouldBeNil )
129+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (1 , 1 ))
130+
131+ err = usage .SetDuration (0 * time .Minute )
132+ So (err , ShouldBeNil )
133+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (0 , 1 ))
134+
135+ err = usage .SetDuration (- 1 * time .Minute )
136+ So (err , ShouldBeNil )
137+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (0 , 1 ))
138+
139+ err = usage .SetDuration (10 * time .Hour + 5 * time .Minute + 10 * time .Second )
140+ So (err , ShouldBeNil )
141+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (1 , 1 ))
142+
143+ err = usage .SetDuration (3 * 24 * time .Hour + 1 * time .Minute )
144+ So (err , ShouldBeNil )
145+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (4 , 1 ))
146+
147+ err = usage .SetDuration (10 * time .Nanosecond )
148+ So (err , ShouldBeNil )
149+ So (usage .Quantity , ShouldEqualBigRat , big .NewRat (1 , 1 ))
150+ })
151+ })
152+ }
153+
44154func TestUsage_BillableQuantity (t * testing.T ) {
45155 Convey ("Testing Usage.BillableQuantity()" , t , FailureContinues , func () {
46156 object := & PricingObject {
0 commit comments