Telephony Test: add sample config files and manage_sim to open source tree.

1. Add several sample config files to ./tests/google/tel/config
2. Add manage_sim script to ./tests/google/tel/etc

BUG: 26267248
Change-Id: I979ca765b12e9e17ec71d814bc13a6edd92e5746
diff --git a/acts/tests/google/tel/etc/manage_sim.py b/acts/tests/google/tel/etc/manage_sim.py
new file mode 100755
index 0000000..3db77d9
--- /dev/null
+++ b/acts/tests/google/tel/etc/manage_sim.py
@@ -0,0 +1,201 @@
+#!/usr/bin/env python3.4
+#
+#   Copyright 2016 - Google
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+"""
+    Basic script for managing a JSON "database" file of SIM cards.
+    It will look at the list of attached devices, and add their SIMs to a
+    database.
+    We expect to add much more functionality in the future.
+"""
+
+import argparse
+import json
+import acts.controllers.android_device as android_device
+import acts.test_utils.tel.tel_defines as tel_defines
+import acts.test_utils.tel.tel_lookup_tables as tel_lookup_tables
+
+def add_sims(sim_card_file=None):
+    if not sim_card_file:
+        print("Error: file name is None.")
+        return False
+    try:
+        f = open(sim_card_file, 'r')
+        simconf = json.load(f)
+        f.close()
+    except FileNotFoundError:
+        simconf = {}
+    flag = False
+
+    droid_list = android_device.get_all_instances()
+    for droid_device in droid_list:
+        droid = droid_device.get_droid(False)
+        if droid.telephonyGetSimState() != tel_defines.SIM_STATE_READY:
+            print("No Valid Sim! {} \n".format(droid.telephonyGetSimState()))
+            continue
+        serial = droid.telephonyGetSimSerialNumber()
+        print("add_sims: {}".format(serial))
+
+        # Add new entry if not exist
+        if serial in simconf:
+            print("Declining to add a duplicate entry: {}".format(serial))
+            #TODO: Add support for "refreshing" an entry
+            continue
+        else:
+            simconf[serial] = {}
+            current = simconf[serial]
+            flag = True
+
+        try:
+            #TODO: Make this list of hPLMNs a separate data structure
+            current["operator"] = tel_lookup_tables.operator_name_from_plmn_id(
+                droid.telephonyGetSimOperator())
+        except KeyError:
+            print("Unknown Operator {}".format(droid.telephonyGetSimOperator()))
+            current["operator"] = ""
+
+        # This is default capability: we need to try and
+        # run-time determine in the future based on SIM queries?
+        current["capability"] = ['voice', 'ims', 'volte', 'vt', 'sms',
+                                 'tethering', 'data']
+
+        phone_num = droid.telephonyGetLine1Number()
+        if not phone_num:
+            print("Please manually add a phone number for {}\n".format(serial))
+            current["phone_num"] = ""
+        else:
+            # Remove the leading +
+            if len(phone_num) == 10:
+                phone_num = "1" + phone_num
+            current["phone_num"] = ''.join(filter(lambda x: x.isdigit(), phone_num))
+    if flag:
+        f = open(sim_card_file, 'w')
+        json.dump(simconf, f, indent=4, sort_keys=True)
+        f.close()
+    return True
+
+def prune_sims(sim_card_file=None):
+    if sim_card_file==None:
+        sim_card_file = "./simcard_list.json"
+    add_sims(sim_card_file)
+
+    try:
+        f = open(sim_card_file, 'r')
+        simconf = json.load(f)
+        f.close()
+    except FileNotFoundError:
+        print ("File not found.")
+        return False
+
+    flag = False
+
+    droid_list = android_device.get_all_instances()
+
+    simconf_list = list(simconf.keys())
+    delete_list = []
+    active_list = []
+
+    for droid_device in droid_list:
+        droid = droid_device.get_droid(False)
+        if droid.telephonyGetSimState() != tel_defines.SIM_STATE_READY:
+            print("No Valid SIM! {} \n".format(droid.telephonyGetSimState()))
+            continue
+        serial = droid.telephonyGetSimSerialNumber()
+        active_list.append(serial)
+
+    delete_list = list(set(simconf_list).difference(set(active_list)))
+
+    print("active phones: {}".format(active_list))
+
+    if len(delete_list) > 0:
+        for sim in delete_list:
+            # prune
+            print("Deleting the SIM entry: ", sim)
+            del simconf[sim]
+            flag = True
+    else:
+        print("nothing to prune")
+
+    if flag:
+        f = open(sim_card_file, 'w')
+        json.dump(simconf, f, indent=4, sort_keys=True)
+        f.close()
+    return True
+
+
+if __name__ == "__main__":
+
+    parser = argparse.ArgumentParser(
+                      description=("Script to generate, augment and prune"
+                                   " SIM list"))
+    parser.add_argument("-f","--file",
+                       default='./simcard_list.json',
+                       help="json file path", type=str)
+    group = parser.add_mutually_exclusive_group()
+    group.add_argument("-a",help="append to the list of SIM entries",
+                      action='store_true')
+    group.add_argument("-p",help="prune the list of SIM entries",
+                      action='store_true')
+
+    args = parser.parse_args()
+
+    if args.a:
+        add_sims(args.f)
+    elif args.p:
+        prune_sims(args.f)
+    else:
+        print ("Error: must select an option: -a or -p")
+
+"""
+Usage Examples
+
+----------------------------------------------------------------
+p3 manage_sim.py -h
+usage: manage_sim.py [-h] [-f F] [-a | -p]
+
+Script to generate, augment and prune SIM list
+
+optional arguments:
+  -h, --help      show this help message and exit
+  -f F, --file F  name for json file
+  -a              append to the list of SIM entries
+  -p              prune the list of SIM entries
+
+----------------------------------------------------------------
+p3 manage_sim.py -f ./simcard_list.json -p
+        OR
+p3 manage_sim.py -p
+
+Namespace(a=False, f='./simcard_list.json', p=True)
+add_sims: 8901260222780922759
+Please manually add a phone number for 8901260222780922759
+
+active phones: 1
+ ['8901260222780922759']
+Deleting the SIM entry:  89148000001280331488
+:
+:
+Deleting the SIM entry:  89014103277559059196
+
+----------------------------------------------------------------
+p3 manage_sim.py -f ./simcard_list.json -a
+        OR
+p3 manage_sim.py -a
+
+Namespace(a=True, f='./simcard_list.json', p=False)
+add_sims: 8901260222780922759
+Please manually add a phone number for 8901260222780922759
+
+----------------------------------------------------------------
+"""