DO NOT MERGE Track tzdb 2021a3 updates. [O-MR1-CTS]

This CL updates tests related to 2021a1 and 2021a3 TZDB release.

ICU's tzdata 2021a3 changes canonicalisation rules for some time zones.
This CL updates tests assosiated with these changes with one minor
change: Android skipped change which makes America/Panama canonical
representation of America/Coral_Harbour.

Only test changes are kept, binary and txt files left as they were.

Bug: 207111172
Bug: 207805859
Test: see system/timezone CL

Change-Id: I9442dfc4e08cd9dc55b5afe5ed5e4d9336dadfa5
Merged-In: I9442dfc4e08cd9dc55b5afe5ed5e4d9336dadfa5
Merged-In: I0d2b0b1a64a59721f845a63500801abfd96daca3
diff --git a/android_icu4j/src/main/tests/android/icu/dev/test/timezone/TimeZoneTest.java b/android_icu4j/src/main/tests/android/icu/dev/test/timezone/TimeZoneTest.java
index fe6b263..2375f95 100644
--- a/android_icu4j/src/main/tests/android/icu/dev/test/timezone/TimeZoneTest.java
+++ b/android_icu4j/src/main/tests/android/icu/dev/test/timezone/TimeZoneTest.java
@@ -561,10 +561,10 @@
 //      logln(stza.toString());
 
         String tzver = TimeZone.getTZDataVersion();
-        if (tzver.length() != 5 /* 4 digits + 1 letter */) {
-            errln("FAIL: getTZDataVersion returned " + tzver);
-        } else {
+        if (tzver != null && (tzver.length() == 5 || tzver.length() == 6) /* 4 digits + 1 or 2 letters */ ) {
             logln("PASS: tzdata version: " + tzver);
+        } else {
+            errln("FAIL: getTZDataVersion returned " + tzver);
         }
     }
 
@@ -1548,6 +1548,12 @@
                 {"Africa/Sao_Tome", "Africa/Abidjan"},
                 {"America/Antigua", "America/Port_of_Spain"},
                 {"America/Anguilla", "America/Port_of_Spain"},
+                {"America/Cayman", "America/Panama"},
+                // TODO(b/204533494): enable this check back.
+                // Android-Changed: due to issues with time zones canonicity, decision was made
+                // to keep America/Coral_Harbour as alias to America/Atikokan.
+                // See more details in system/timezone/RELEASE_NOTES.md
+                // {"America/Coral_Harbour", "America/Panama"},
                 {"America/Curacao", "America/Aruba"},
                 {"America/Dominica", "America/Port_of_Spain"},
                 {"America/Grenada", "America/Port_of_Spain"},
@@ -1556,7 +1562,6 @@
                 {"America/Lower_Princes", "America/Aruba"},
                 {"America/Marigot", "America/Port_of_Spain"},
                 {"America/Montserrat", "America/Port_of_Spain"},
-                {"America/Panama", "America/Cayman"},
                 {"America/Santa_Isabel", "America/Tijuana"},
                 {"America/Shiprock", "America/Denver"},
                 {"America/St_Barthelemy", "America/Port_of_Spain"},
@@ -1566,7 +1571,7 @@
                 {"America/St_Vincent", "America/Port_of_Spain"},
                 {"America/Toronto", "America/Montreal"},
                 {"America/Tortola", "America/Port_of_Spain"},
-                {"America/Virgin", "America/Port_of_Spain"},
+                {"America/Virgin", "America/Puerto_Rico"},
                 {"Antarctica/South_Pole", "Antarctica/McMurdo"},
                 {"Arctic/Longyearbyen", "Europe/Oslo"},
                 {"Asia/Kuwait", "Asia/Aden"},
@@ -1657,7 +1662,7 @@
             if (!bFoundCanonical) {
                 // test exclusion because of differences between Olson tzdata and CLDR
                 boolean isExcluded = false;
-                for (int k = 0; k < excluded1.length; k++) {
+                for (int k = 0; k < excluded2.length; k++) {
                     if (ids[i].equals(excluded2[k])) {
                         isExcluded = true;
                         break;
diff --git a/icu4c/source/test/cintltst/ccaltst.c b/icu4c/source/test/cintltst/ccaltst.c
index 25d95b3..967922e 100644
--- a/icu4c/source/test/cintltst/ccaltst.c
+++ b/icu4c/source/test/cintltst/ccaltst.c
@@ -114,6 +114,7 @@
     char tempMsgBuf[256];
     UChar zone1[32], zone2[32];
     const char *tzver = 0;
+    int32_t tzverLen = 0;
     UChar canonicalID[64];
     UBool isSystemID = FALSE;
     const UCalGetTypeTest * ucalGetTypeTestPtr;
@@ -257,10 +258,13 @@
     tzver = ucal_getTZDataVersion(&status);
     if (U_FAILURE(status)) {
         log_err_status(status, "FAIL: ucal_getTZDataVersion() => %s\n", u_errorName(status));
-    } else if (uprv_strlen(tzver) != 5 /*4 digits + 1 letter*/) {
-        log_err("FAIL: Bad version string was returned by ucal_getTZDataVersion\n");
     } else {
-        log_verbose("PASS: ucal_getTZDataVersion returned %s\n", tzver);
+        tzverLen = uprv_strlen(tzver);
+        if (tzverLen == 5 || tzverLen == 6 /* 4 digits + 1 or 2 letters */) {
+            log_verbose("PASS: ucal_getTZDataVersion returned %s\n", tzver);
+        } else {
+            log_err("FAIL: Bad version string was returned by ucal_getTZDataVersion\n");
+        }
     }
     
     /*Testing ucal_getCanonicalTimeZoneID*/
diff --git a/icu4c/source/test/intltest/tztest.cpp b/icu4c/source/test/intltest/tztest.cpp
index 0659245..aa43648 100644
--- a/icu4c/source/test/intltest/tztest.cpp
+++ b/icu4c/source/test/intltest/tztest.cpp
@@ -148,10 +148,13 @@
     const char* tzver = TimeZone::getTZDataVersion(status);
     if (U_FAILURE(status)) {
         errcheckln(status, "FAIL: getTZDataVersion failed - %s", u_errorName(status));
-    } else if (uprv_strlen(tzver) != 5 /* 4 digits + 1 letter */) {
-        errln((UnicodeString)"FAIL: getTZDataVersion returned " + tzver);
     } else {
-        logln((UnicodeString)"tzdata version: " + tzver);
+        int32_t tzverLen = uprv_strlen(tzver);
+        if (tzverLen == 5 || tzverLen == 6 /* 4 digits + 1 or 2 letters */) {
+            logln((UnicodeString)"tzdata version: " + tzver);
+        } else {
+            errln((UnicodeString)"FAIL: getTZDataVersion returned " + tzver);
+        }
     }
 }
 
@@ -2018,6 +2021,12 @@
         {"Africa/Sao_Tome", "Africa/Abidjan"},
         {"America/Antigua", "America/Port_of_Spain"},
         {"America/Anguilla", "America/Port_of_Spain"},
+        {"America/Cayman", "America/Panama"},
+        // TODO(b/204533494): enable this check back.
+        // Android-Changed: due to issues with time zones canonicity, decision was made to keep
+        // America/Coral_Harbour as alias to America/Atikokan.
+        // See more details in system/timezone/RELEASE_NOTES.md
+        // {"America/Coral_Harbour", "America/Panama"},
         {"America/Curacao", "America/Aruba"},
         {"America/Dominica", "America/Port_of_Spain"},
         {"America/Grenada", "America/Port_of_Spain"},
@@ -2026,7 +2035,6 @@
         {"America/Lower_Princes", "America/Aruba"},
         {"America/Marigot", "America/Port_of_Spain"},
         {"America/Montserrat", "America/Port_of_Spain"},
-        {"America/Panama", "America/Cayman"},
         {"America/Santa_Isabel", "America/Tijuana"},
         {"America/Shiprock", "America/Denver"},
         {"America/St_Barthelemy", "America/Port_of_Spain"},
@@ -2036,7 +2044,7 @@
         {"America/St_Vincent", "America/Port_of_Spain"},
         {"America/Toronto", "America/Montreal"},
         {"America/Tortola", "America/Port_of_Spain"},
-        {"America/Virgin", "America/Port_of_Spain"},
+        {"America/Virgin", "America/Puerto_Rico"},
         {"Antarctica/South_Pole", "Antarctica/McMurdo"},
         {"Arctic/Longyearbyen", "Europe/Oslo"},
         {"Asia/Kuwait", "Asia/Aden"},
diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java
index a65cddf..781cff5 100644
--- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java
+++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java
@@ -558,10 +558,10 @@
 //      logln(stza.toString());
 
         String tzver = TimeZone.getTZDataVersion();
-        if (tzver.length() != 5 /* 4 digits + 1 letter */) {
-            errln("FAIL: getTZDataVersion returned " + tzver);
-        } else {
+        if (tzver != null && (tzver.length() == 5 || tzver.length() == 6) /* 4 digits + 1 or 2 letters */ ) {
             logln("PASS: tzdata version: " + tzver);
+        } else {
+            errln("FAIL: getTZDataVersion returned " + tzver);
         }
     }
 
@@ -1545,6 +1545,12 @@
                 {"Africa/Sao_Tome", "Africa/Abidjan"},
                 {"America/Antigua", "America/Port_of_Spain"},
                 {"America/Anguilla", "America/Port_of_Spain"},
+                {"America/Cayman", "America/Panama"},
+                // TODO(b/204533494): enable this check back.
+                // Android-Changed: due to issues with time zones canonicity, decision was made
+                // to keep America/Coral_Harbour as alias to America/Atikokan.
+                // See more details in system/timezone/RELEASE_NOTES.md
+                // {"America/Coral_Harbour", "America/Panama"},
                 {"America/Curacao", "America/Aruba"},
                 {"America/Dominica", "America/Port_of_Spain"},
                 {"America/Grenada", "America/Port_of_Spain"},
@@ -1553,7 +1559,6 @@
                 {"America/Lower_Princes", "America/Aruba"},
                 {"America/Marigot", "America/Port_of_Spain"},
                 {"America/Montserrat", "America/Port_of_Spain"},
-                {"America/Panama", "America/Cayman"},
                 {"America/Santa_Isabel", "America/Tijuana"},
                 {"America/Shiprock", "America/Denver"},
                 {"America/St_Barthelemy", "America/Port_of_Spain"},
@@ -1563,7 +1568,7 @@
                 {"America/St_Vincent", "America/Port_of_Spain"},
                 {"America/Toronto", "America/Montreal"},
                 {"America/Tortola", "America/Port_of_Spain"},
-                {"America/Virgin", "America/Port_of_Spain"},
+                {"America/Virgin", "America/Puerto_Rico"},
                 {"Antarctica/South_Pole", "Antarctica/McMurdo"},
                 {"Arctic/Longyearbyen", "Europe/Oslo"},
                 {"Asia/Kuwait", "Asia/Aden"},
@@ -1654,7 +1659,7 @@
             if (!bFoundCanonical) {
                 // test exclusion because of differences between Olson tzdata and CLDR
                 boolean isExcluded = false;
-                for (int k = 0; k < excluded1.length; k++) {
+                for (int k = 0; k < excluded2.length; k++) {
                     if (ids[i].equals(excluded2[k])) {
                         isExcluded = true;
                         break;