@@ -88,8 +88,7 @@ func TestTokenWillExpireIn(t *testing.T) {
88
88
}
89
89
90
90
func TestParseExpiresOn (t * testing.T ) {
91
- // get current time, round to nearest second, and add one hour
92
- n := time .Now ().UTC ().Round (time .Second ).Add (time .Hour )
91
+ n := time .Now ().UTC ()
93
92
amPM := "AM"
94
93
if n .Hour () >= 12 {
95
94
amPM = "PM"
@@ -107,12 +106,12 @@ func TestParseExpiresOn(t *testing.T) {
107
106
{
108
107
Name : "timestamp with AM/PM" ,
109
108
String : fmt .Sprintf ("%d/%d/%d %d:%02d:%02d %s +00:00" , n .Month (), n .Day (), n .Year (), n .Hour (), n .Minute (), n .Second (), amPM ),
110
- Value : 3600 ,
109
+ Value : n . Unix () ,
111
110
},
112
111
{
113
112
Name : "timestamp without AM/PM" ,
114
- String : fmt .Sprintf ("%d/%d/%d %d :%02d:%02d +00:00" , n .Month (), n .Day (), n .Year (), n .Hour (), n .Minute (), n .Second ()),
115
- Value : 3600 ,
113
+ String : fmt .Sprintf ("%02d/%02d/%02d %02d :%02d:%02d +00:00" , n .Month (), n .Day (), n .Year (), n .Hour (), n .Minute (), n .Second ()),
114
+ Value : n . Unix () ,
116
115
},
117
116
}
118
117
for _ , tc := range testcases {
@@ -368,7 +367,8 @@ func TestServicePrincipalTokenFromASE(t *testing.T) {
368
367
}
369
368
spt .MaxMSIRefreshAttempts = 1
370
369
// expires_on is sent in UTC
371
- expiresOn := time .Now ().UTC ().Add (time .Hour )
370
+ nowTime := time .Now ()
371
+ expiresOn := nowTime .UTC ().Add (time .Hour )
372
372
// use int format for expires_in
373
373
body := mocks .NewBody (newTokenJSON ("3600" , expiresOn .Format (expiresOnDateFormat ), "test" ))
374
374
resp := mocks .NewResponseWithBodyAndStatus (body , http .StatusOK , "OK" )
@@ -407,10 +407,8 @@ func TestServicePrincipalTokenFromASE(t *testing.T) {
407
407
if err != nil {
408
408
t .Fatalf ("adal: failed to get ExpiresOn %v" , err )
409
409
}
410
- // depending on elapsed time it might be slightly less that one hour
411
- const hourInSeconds = int64 (time .Hour / time .Second )
412
- if v > hourInSeconds || v < hourInSeconds - 1 {
413
- t .Fatalf ("adal: expected %v, got %v" , int64 (time .Hour / time .Second ), v )
410
+ if nowAsUnix := nowTime .Add (time .Hour ).Unix (); v != nowAsUnix {
411
+ t .Fatalf ("adal: expected %v, got %v" , nowAsUnix , v )
414
412
}
415
413
if body .IsOpen () {
416
414
t .Fatalf ("the response was not closed!" )
@@ -891,6 +889,34 @@ func TestServicePrincipalTokenEnsureFreshRefreshes(t *testing.T) {
891
889
}
892
890
}
893
891
892
+ func TestServicePrincipalTokenEnsureFreshWithIntExpiresOn (t * testing.T ) {
893
+ spt := newServicePrincipalToken ()
894
+ expireToken (& spt .inner .Token )
895
+
896
+ body := mocks .NewBody (newTokenJSONIntExpiresOn (`"3600"` , 12345 , "test" ))
897
+ resp := mocks .NewResponseWithBodyAndStatus (body , http .StatusOK , "OK" )
898
+
899
+ f := false
900
+ c := mocks .NewSender ()
901
+ s := DecorateSender (c ,
902
+ (func () SendDecorator {
903
+ return func (s Sender ) Sender {
904
+ return SenderFunc (func (r * http.Request ) (* http.Response , error ) {
905
+ f = true
906
+ return resp , nil
907
+ })
908
+ }
909
+ })())
910
+ spt .SetSender (s )
911
+ err := spt .EnsureFresh ()
912
+ if err != nil {
913
+ t .Fatalf ("adal: ServicePrincipalToken#EnsureFresh returned an unexpected error (%v)" , err )
914
+ }
915
+ if ! f {
916
+ t .Fatal ("adal: ServicePrincipalToken#EnsureFresh failed to call Refresh for stale token" )
917
+ }
918
+ }
919
+
894
920
func TestServicePrincipalTokenEnsureFreshFails1 (t * testing.T ) {
895
921
spt := newServicePrincipalToken ()
896
922
expireToken (& spt .inner .Token )
@@ -1461,6 +1487,19 @@ func newTokenJSON(expiresIn, expiresOn, resource string) string {
1461
1487
expiresIn , expiresOn , nb , resource )
1462
1488
}
1463
1489
1490
+ func newTokenJSONIntExpiresOn (expiresIn string , expiresOn int , resource string ) string {
1491
+ return fmt .Sprintf (`{
1492
+ "access_token" : "accessToken",
1493
+ "expires_in" : %s,
1494
+ "expires_on" : %d,
1495
+ "not_before" : "%d",
1496
+ "resource" : "%s",
1497
+ "token_type" : "Bearer",
1498
+ "refresh_token": "ABC123"
1499
+ }` ,
1500
+ expiresIn , expiresOn , expiresOn , resource )
1501
+ }
1502
+
1464
1503
func newADFSTokenJSON (expiresIn int ) string {
1465
1504
return fmt .Sprintf (`{
1466
1505
"access_token" : "accessToken",
0 commit comments