3232import static android .net .TrafficStats .MB_IN_BYTES ;
3333import static android .text .format .DateUtils .DAY_IN_MILLIS ;
3434import static android .text .format .DateUtils .MINUTE_IN_MILLIS ;
35+ import static android .text .format .Time .TIMEZONE_UTC ;
3536import static com .android .server .net .NetworkPolicyManagerService .TYPE_LIMIT ;
3637import static com .android .server .net .NetworkPolicyManagerService .TYPE_LIMIT_SNOOZED ;
3738import static com .android .server .net .NetworkPolicyManagerService .TYPE_WARNING ;
@@ -439,7 +440,7 @@ public void testLastCycleBoundaryThisMonth() throws Exception {
439440 final long expectedCycle = parseTime ("2007-11-05T00:00:00.000Z" );
440441
441442 final NetworkPolicy policy = new NetworkPolicy (
442- sTemplateWifi , 5 , 1024L , 1024L , false );
443+ sTemplateWifi , 5 , TIMEZONE_UTC , 1024L , 1024L , false );
443444 final long actualCycle = computeLastCycleBoundary (currentTime , policy );
444445 assertTimeEquals (expectedCycle , actualCycle );
445446 }
@@ -450,7 +451,7 @@ public void testLastCycleBoundaryLastMonth() throws Exception {
450451 final long expectedCycle = parseTime ("2007-10-20T00:00:00.000Z" );
451452
452453 final NetworkPolicy policy = new NetworkPolicy (
453- sTemplateWifi , 20 , 1024L , 1024L , false );
454+ sTemplateWifi , 20 , TIMEZONE_UTC , 1024L , 1024L , false );
454455 final long actualCycle = computeLastCycleBoundary (currentTime , policy );
455456 assertTimeEquals (expectedCycle , actualCycle );
456457 }
@@ -461,7 +462,7 @@ public void testLastCycleBoundaryThisMonthFebruary() throws Exception {
461462 final long expectedCycle = parseTime ("2007-01-30T00:00:00.000Z" );
462463
463464 final NetworkPolicy policy = new NetworkPolicy (
464- sTemplateWifi , 30 , 1024L , 1024L , false );
465+ sTemplateWifi , 30 , TIMEZONE_UTC , 1024L , 1024L , false );
465466 final long actualCycle = computeLastCycleBoundary (currentTime , policy );
466467 assertTimeEquals (expectedCycle , actualCycle );
467468 }
@@ -472,14 +473,53 @@ public void testLastCycleBoundaryLastMonthFebruary() throws Exception {
472473 final long expectedCycle = parseTime ("2007-02-28T23:59:59.000Z" );
473474
474475 final NetworkPolicy policy = new NetworkPolicy (
475- sTemplateWifi , 30 , 1024L , 1024L , false );
476+ sTemplateWifi , 30 , TIMEZONE_UTC , 1024L , 1024L , false );
476477 final long actualCycle = computeLastCycleBoundary (currentTime , policy );
477478 assertTimeEquals (expectedCycle , actualCycle );
478479 }
479480
481+ public void testCycleBoundaryLeapYear () throws Exception {
482+ final NetworkPolicy policy = new NetworkPolicy (
483+ sTemplateWifi , 29 , TIMEZONE_UTC , 1024L , 1024L , false );
484+
485+ assertTimeEquals (parseTime ("2012-01-29T00:00:00.000Z" ),
486+ computeNextCycleBoundary (parseTime ("2012-01-14T00:00:00.000Z" ), policy ));
487+ assertTimeEquals (parseTime ("2012-02-29T00:00:00.000Z" ),
488+ computeNextCycleBoundary (parseTime ("2012-02-14T00:00:00.000Z" ), policy ));
489+ assertTimeEquals (parseTime ("2012-02-29T00:00:00.000Z" ),
490+ computeLastCycleBoundary (parseTime ("2012-03-14T00:00:00.000Z" ), policy ));
491+ assertTimeEquals (parseTime ("2012-03-29T00:00:00.000Z" ),
492+ computeNextCycleBoundary (parseTime ("2012-03-14T00:00:00.000Z" ), policy ));
493+
494+ assertTimeEquals (parseTime ("2007-01-29T00:00:00.000Z" ),
495+ computeNextCycleBoundary (parseTime ("2007-01-14T00:00:00.000Z" ), policy ));
496+ assertTimeEquals (parseTime ("2007-02-28T23:59:59.000Z" ),
497+ computeNextCycleBoundary (parseTime ("2007-02-14T00:00:00.000Z" ), policy ));
498+ assertTimeEquals (parseTime ("2007-02-28T23:59:59.000Z" ),
499+ computeLastCycleBoundary (parseTime ("2007-03-14T00:00:00.000Z" ), policy ));
500+ assertTimeEquals (parseTime ("2007-03-29T00:00:00.000Z" ),
501+ computeNextCycleBoundary (parseTime ("2007-03-14T00:00:00.000Z" ), policy ));
502+ }
503+
504+ public void testNextCycleTimezoneAfterUtc () throws Exception {
505+ // US/Central is UTC-6
506+ final NetworkPolicy policy = new NetworkPolicy (
507+ sTemplateWifi , 10 , "US/Central" , 1024L , 1024L , false );
508+ assertTimeEquals (parseTime ("2012-01-10T06:00:00.000Z" ),
509+ computeNextCycleBoundary (parseTime ("2012-01-05T00:00:00.000Z" ), policy ));
510+ }
511+
512+ public void testNextCycleTimezoneBeforeUtc () throws Exception {
513+ // Israel is UTC+2
514+ final NetworkPolicy policy = new NetworkPolicy (
515+ sTemplateWifi , 10 , "Israel" , 1024L , 1024L , false );
516+ assertTimeEquals (parseTime ("2012-01-09T22:00:00.000Z" ),
517+ computeNextCycleBoundary (parseTime ("2012-01-05T00:00:00.000Z" ), policy ));
518+ }
519+
480520 public void testNextCycleSane () throws Exception {
481521 final NetworkPolicy policy = new NetworkPolicy (
482- sTemplateWifi , 31 , WARNING_DISABLED , LIMIT_DISABLED , false );
522+ sTemplateWifi , 31 , TIMEZONE_UTC , WARNING_DISABLED , LIMIT_DISABLED , false );
483523 final LinkedHashSet <Long > seen = new LinkedHashSet <Long >();
484524
485525 // walk forwards, ensuring that cycle boundaries don't get stuck
@@ -494,7 +534,7 @@ public void testNextCycleSane() throws Exception {
494534
495535 public void testLastCycleSane () throws Exception {
496536 final NetworkPolicy policy = new NetworkPolicy (
497- sTemplateWifi , 31 , WARNING_DISABLED , LIMIT_DISABLED , false );
537+ sTemplateWifi , 31 , TIMEZONE_UTC , WARNING_DISABLED , LIMIT_DISABLED , false );
498538 final LinkedHashSet <Long > seen = new LinkedHashSet <Long >();
499539
500540 // walk backwards, ensuring that cycle boundaries look sane
@@ -552,7 +592,7 @@ public void testNetworkPolicyAppliedCycleLastMonth() throws Exception {
552592
553593 replay ();
554594 setNetworkPolicies (new NetworkPolicy (
555- sTemplateWifi , CYCLE_DAY , 1 * MB_IN_BYTES , 2 * MB_IN_BYTES , false ));
595+ sTemplateWifi , CYCLE_DAY , TIMEZONE_UTC , 1 * MB_IN_BYTES , 2 * MB_IN_BYTES , false ));
556596 future .get ();
557597 verifyAndReset ();
558598 }
@@ -609,8 +649,8 @@ public void testOverWarningLimitNotification() throws Exception {
609649 future = expectMeteredIfacesChanged ();
610650
611651 replay ();
612- setNetworkPolicies (new NetworkPolicy (sTemplateWifi , CYCLE_DAY , 1 * MB_IN_BYTES ,
613- 2 * MB_IN_BYTES , false ));
652+ setNetworkPolicies (new NetworkPolicy (sTemplateWifi , CYCLE_DAY , TIMEZONE_UTC , 1
653+ * MB_IN_BYTES , 2 * MB_IN_BYTES , false ));
614654 future .get ();
615655 verifyAndReset ();
616656 }
@@ -740,8 +780,9 @@ public void testMeteredNetworkWithoutLimit() throws Exception {
740780 future = expectMeteredIfacesChanged (TEST_IFACE );
741781
742782 replay ();
743- setNetworkPolicies (new NetworkPolicy (sTemplateWifi , CYCLE_DAY , WARNING_DISABLED ,
744- LIMIT_DISABLED , true ));
783+ setNetworkPolicies (new NetworkPolicy (
784+ sTemplateWifi , CYCLE_DAY , TIMEZONE_UTC , WARNING_DISABLED , LIMIT_DISABLED ,
785+ true ));
745786 future .get ();
746787 verifyAndReset ();
747788 }
0 commit comments