blob: a79ff77528b04dba2e71476919564029d7cd3396 [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 2018 Google, Inc.
#
# 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.
import json
import logging
import pprint
import requests
import time
from acts import asserts
from acts import signals
from acts import utils
from acts_contrib.test_utils.wifi import wifi_constants
"""This file consists of all the helper methods needed to interact with the
Datastore @ https://chaos-188802.appspot.com/ used for Android Interop
testing.
"""
DATASTORE_HOST = "https://chaos-188802.appspot.com"
# The Datastore defines the following paths for operating methods.
ADD_DEVICE = "devices/new"
REMOVE_DEVICE = "devices/delete"
LOCK_DEVICE = "devices/lock"
UNLOCK_DEVICE = "devices/unlock"
SHOW_DEVICE = "devices/"
GET_DEVICES = "devices/"
# HTTP content type. JSON encoded with UTF-8 character encoding.
HTTP_HEADER = {'content-type': 'application/json'}
def add_device(name, ap_label, lab_label):
"""Add a device(AP or Packet Capturer) in datastore.
Args:
name: string, hostname of the device.
ap_label: string, AP brand name.
lab_label: string, lab label for AP.
Returns:
True if device was added successfully; 0 otherwise.
"""
request = DATASTORE_HOST + '/' + ADD_DEVICE
logging.debug("Request = %s" % request)
response = requests.post(request,
headers=HTTP_HEADER,
data=json.dumps({"hostname":name,
"ap_label":ap_label,
"lab_label":lab_label}))
if response.json()['result'] == 'success':
logging.info("Added device %s to datastore" % name)
return True
return False
def remove_device(name):
"""Delete a device(AP or Packet Capturer) in datastore.
Args:
name: string, hostname of the device to delete.
Returns:
True if device was deleted successfully; 0 otherwise.
"""
request = DATASTORE_HOST + '/' + REMOVE_DEVICE
logging.debug("Request = %s" % request)
response = requests.put(request,
headers=HTTP_HEADER,
data=json.dumps({"hostname":name}))
result_str = "%s deleted." % name
if result_str in response.text:
logging.info("Removed device %s from datastore" % name)
return True
return False
def lock_device(name, admin):
"""Lock a device(AP or Packet Capturer) in datastore.
Args:
name: string, hostname of the device in datastore.
admin: string, unique admin name for locking.
Returns:
True if operation was successful; 0 otherwise.
"""
request = DATASTORE_HOST + '/' + LOCK_DEVICE
logging.debug("Request = %s" % request)
response = requests.put(request,
headers=HTTP_HEADER,
data=json.dumps({"hostname":name, "locked_by":admin}))
if response.json()['result']:
logging.info("Locked device %s in datastore" % name)
return True
return False
def unlock_device(name):
"""Un-lock a device(AP or Packet Capturer) in datastore.
Args:
name: string, hostname of the device in datastore.
Returns:
True if operation was successful; 0 otherwise.
"""
request = DATASTORE_HOST + '/' + UNLOCK_DEVICE
logging.debug("Request = %s" % request)
response = requests.put(request,
headers=HTTP_HEADER,
data=json.dumps({"hostname":name}))
if response.json()['result']:
logging.info("Finished un-locking AP %s in datastore" % name)
return True
return False
def show_device(name):
"""Show device properties for a given device(AP or Packet Capturer).
Args:
name: string, hostname of the device in datastore to fetch info.
Returns: dict of device name:value properties if successful;
None otherwise.
"""
request = DATASTORE_HOST + '/' + SHOW_DEVICE + name
logging.debug("Request = %s" % request)
response = requests.get(request)
if 'error' in response.text:
return None
return response.json()
def get_devices():
"""Get a list of all devices in the datastore.
Returns: dict of all devices' name:value properties if successful;
None otherwise.
"""
request = DATASTORE_HOST + '/' + GET_DEVICES
logging.debug("Request = %s" % request)
response = requests.get(request)
if 'error' in response.text:
return None
return response.json()