示例#1
0
def test_run_refresh(monkeypatch):
    _was_called = False
    
    def mock_get_object(url, parms=None, default=None):
        nonlocal _was_called
        assert url == "/livequery/v1/orgs/Z100/runs/abcdefg"
        assert parms is None
        assert default is None
        _was_called = True
        return {"org_key":"Z100", "name":"FoobieBletch",
                "id":"abcdefg", "status":"COMPLETE"}
    
    api = CbLiveQueryAPI(url="https://example.com", token="ABCD/1234",
                         org_key="Z100", ssl_verify=True)
    run = Run(api, "abcdefg", {"org_key":"Z100", "name":"FoobieBletch",
                                "id":"abcdefg", "status":"ACTIVE"})
    monkeypatch.setattr(api, "get_object", mock_get_object)
    monkeypatch.setattr(api, "post_object", ConnectionMocks.get("POST"))
    monkeypatch.setattr(api, "put_object", ConnectionMocks.get("PUT"))
    monkeypatch.setattr(api, "delete_object", ConnectionMocks.get("DELETE"))
    rc = run.refresh()
    assert _was_called
    assert rc == True
    assert run.org_key == "Z100"
    assert run.name == "FoobieBletch"
    assert run.id == "abcdefg"
    assert run.status == "COMPLETE"
示例#2
0
def test_run_delete(monkeypatch):
    _was_called = False
    
    def mock_delete_object(url):
        nonlocal _was_called
        if _was_called:
            pytest.fail("delete should not be called twice!")
        assert url == "/livequery/v1/orgs/Z100/runs/abcdefg"
        _was_called = True
        return MockResponse(None)
    
    api = CbLiveQueryAPI(url="https://example.com", token="ABCD/1234",
                         org_key="Z100", ssl_verify=True)
    run = Run(api, "abcdefg", {"org_key":"Z100", "name":"FoobieBletch",
                                "id":"abcdefg", "status":"ACTIVE"})
    monkeypatch.setattr(api, "get_object", ConnectionMocks.get("GET"))
    monkeypatch.setattr(api, "post_object", ConnectionMocks.get("POST"))
    monkeypatch.setattr(api, "put_object", ConnectionMocks.get("PUT"))
    monkeypatch.setattr(api, "delete_object", mock_delete_object)
    rc = run.delete()
    assert _was_called
    assert rc == True
    assert run._is_deleted
    # Now ensure that certain operations that don't make sense on a deleted object raise ApiError
    with pytest.raises(ApiError):
        run.refresh()
    with pytest.raises(ApiError):
        run.stop()
    # And make sure that deleting a deleted object returns True immediately
    rc = run.delete()
    assert rc == True
示例#3
0
def test_query(monkeypatch):
    _was_called = False

    def mock_post_object(url, body, **kwargs):
        nonlocal _was_called
        assert url == "/livequery/v1/orgs/Z100/runs"
        assert body["sql"] == "select * from whatever;"
        _was_called = True
        return MockResponse({
            "org_key": "Z100",
            "name": "FoobieBletch",
            "id": "abcdefg"
        })

    api = CbLiveQueryAPI(url="https://example.com",
                         token="ABCD/1234",
                         org_key="Z100",
                         ssl_verify=True)
    monkeypatch.setattr(api, "get_object", ConnectionMocks.get("GET"))
    monkeypatch.setattr(api, "post_object", mock_post_object)
    monkeypatch.setattr(api, "put_object", ConnectionMocks.get("PUT"))
    monkeypatch.setattr(api, "delete_object", ConnectionMocks.get("DELETE"))
    query = api.query("select * from whatever;")
    assert isinstance(query, RunQuery)
    run = query.submit()
    assert _was_called
    assert run.org_key == "Z100"
    assert run.name == "FoobieBletch"
    assert run.id == "abcdefg"
示例#4
0
def test_run_stop(monkeypatch):
    _was_called = False
    
    def mock_put_object(url, body, **kwargs):
        nonlocal _was_called
        assert url == "/livequery/v1/orgs/Z100/runs/abcdefg/status"
        assert body["status"] == "CANCELLED"
        _was_called = True
        return MockResponse({"org_key":"Z100", "name":"FoobieBletch",
                            "id":"abcdefg", "status":"CANCELLED"})
        
    api = CbLiveQueryAPI(url="https://example.com", token="ABCD/1234",
                         org_key="Z100", ssl_verify=True)
    run = Run(api, "abcdefg", {"org_key":"Z100", "name":"FoobieBletch",
                                "id":"abcdefg", "status":"ACTIVE"})
    monkeypatch.setattr(api, "get_object", ConnectionMocks.get("GET"))
    monkeypatch.setattr(api, "post_object", ConnectionMocks.get("POST"))
    monkeypatch.setattr(api, "put_object", mock_put_object)
    monkeypatch.setattr(api, "delete_object", ConnectionMocks.get("DELETE"))
    rc = run.stop()
    assert _was_called
    assert rc == True
    assert run.org_key == "Z100"
    assert run.name == "FoobieBletch"
    assert run.id == "abcdefg"
    assert run.status == "CANCELLED"
示例#5
0
def test_result_query_device_summary_facets(monkeypatch):
    _was_called = False
    
    def mock_post_object(url, body, **kwargs):
        nonlocal _was_called
        assert url == "/livequery/v1/orgs/Z100/runs/abcdefg/results/device_summaries/_facet"
        assert body["query"] == "xyzzy"
        t = body["criteria"]
        assert t["device_name"] == ["AxCx", "A7X"]
        t = body["terms"]
        assert t["fields"] == ["alpha", "bravo", "charlie"]
        _was_called = True
        v1 = {"total":1, "id":"alpha1", "name":"alpha1"}
        v2 = {"total":2, "id":"alpha2", "name":"alpha2"}
        term1 = {"field":"alpha", "values":[v1, v2]} 
        v1 = {"total":1, "id":"bravo1", "name":"bravo1"}
        v2 = {"total":2, "id":"bravo2", "name":"bravo2"}
        term2 = {"field":"bravo", "values":[v1, v2]} 
        v1 = {"total":1, "id":"charlie1", "name":"charlie1"}
        v2 = {"total":2, "id":"charlie2", "name":"charlie2"}
        term3 = {"field":"charlie", "values":[v1, v2]}
        return MockResponse({"terms":[term1, term2, term3]}) 
    
    api = CbLiveQueryAPI(url="https://example.com", token="ABCD/1234",
                         org_key="Z100", ssl_verify=True)
    tmp_id = {"id":"abcdefg"}
    result = Result(api, {"id": "abcdefg", "device":tmp_id, "fields":{}, "metrics":{}})
    monkeypatch.setattr(api, "get_object", ConnectionMocks.get("GET"))
    monkeypatch.setattr(api, "post_object", mock_post_object)
    monkeypatch.setattr(api, "put_object", ConnectionMocks.get("PUT"))
    monkeypatch.setattr(api, "delete_object", ConnectionMocks.get("DELETE"))
    query = result.query_device_summary_facets().where("xyzzy")
    query = query.facet_field("alpha").facet_field(["bravo", "charlie"])
    query = query.criteria(device_name=["AxCx", "A7X"])    
    assert isinstance(query, FacetQuery)
    count = 0
    for item in query.all():
        vals = item.values
        if item.field == "alpha":
            assert vals[0]["id"] == "alpha1" 
            assert vals[1]["id"] == "alpha2" 
        elif item.field == "bravo":
            assert vals[0]["id"] == "bravo1" 
            assert vals[1]["id"] == "bravo2" 
        elif item.field == "charlie":
            assert vals[0]["id"] == "charlie1" 
            assert vals[1]["id"] == "charlie2" 
        else:
            pytest.fail("Unknown field name %s seen" % item.field)                
        count = count + 1
    assert _was_called
    assert count == 3
示例#6
0
def test_query_history_with_everything(monkeypatch):
    _was_called = False

    def mock_post_object(url, body, **kwargs):
        nonlocal _was_called
        assert url == "/livequery/v1/orgs/Z100/runs/_search"
        assert body["query"] == "xyzzy"
        t = body["sort"][0]
        assert t["field"] == "id"
        assert t["order"] == "ASC"
        _was_called = True
        run1 = {"org_key": "Z100", "name": "FoobieBletch", "id": "abcdefg"}
        run2 = {"org_key": "Z100", "name": "Aoxomoxoa", "id": "cdefghi"}
        run3 = {"org_key": "Z100", "name": "Read_Me", "id": "efghijk"}
        return MockResponse({
            "org_key": "Z100",
            "num_found": 3,
            "results": [run1, run2, run3]
        })

    api = CbLiveQueryAPI(url="https://example.com",
                         token="ABCD/1234",
                         org_key="Z100",
                         ssl_verify=True)
    monkeypatch.setattr(api, "get_object", ConnectionMocks.get("GET"))
    monkeypatch.setattr(api, "post_object", mock_post_object)
    monkeypatch.setattr(api, "put_object", ConnectionMocks.get("PUT"))
    monkeypatch.setattr(api, "delete_object", ConnectionMocks.get("DELETE"))
    query = api.query_history("xyzzy").sort_by("id")
    assert isinstance(query, RunHistoryQuery)
    count = 0
    for item in query.all():
        assert item.org_key == "Z100"
        if item.id == "abcdefg":
            assert item.name == "FoobieBletch"
        elif item.id == "cdefghi":
            assert item.name == "Aoxomoxoa"
        elif item.id == "efghijk":
            assert item.name == "Read_Me"
        else:
            pytest.fail("Unknown item ID: %s" % item.id)
        count = count + 1
    assert _was_called
    assert count == 3
示例#7
0
def test_result_device_summaries(monkeypatch):
    _was_called = False

    def mock_post_object(url, body, **kwargs):
        nonlocal _was_called
        assert url == "/livequery/v1/orgs/Z100/runs/abcdefg/results/device_summaries/_search"
        assert body["query"] == "foo"
        t = body["criteria"]
        assert t["device_name"] == ["AxCx", "A7X"]
        t = body["sort"][0]
        assert t["field"] == "device_name"
        assert t["order"] == "ASC"
        _was_called = True
        metrics = [{"key":"aaa", "value":0.0}, {"key":"bbb", "value":0.0}]
        res1 = {"id":"ghijklm", "total_results":2, "device_id":314159, "metrics":metrics}
        res2 = {"id":"mnopqrs", "total_results":3, "device_id":271828, "metrics":metrics}
        return MockResponse({"org_key":"Z100", "num_found":2, "results":[res1, res2]})        
    
    api = CbLiveQueryAPI(url="https://example.com", token="ABCD/1234",
                         org_key="Z100", ssl_verify=True)
    tmp_id = {"id":"abcdefg"}
    result = Result(api, {"id": "abcdefg", "device":tmp_id, "fields":{}, "metrics":{}})
    monkeypatch.setattr(api, "get_object", ConnectionMocks.get("GET"))
    monkeypatch.setattr(api, "post_object", mock_post_object)
    monkeypatch.setattr(api, "put_object", ConnectionMocks.get("PUT"))
    monkeypatch.setattr(api, "delete_object", ConnectionMocks.get("DELETE"))
    query = result.query_device_summaries().where("foo").criteria(device_name=["AxCx", "A7X"])
    query = query.sort_by("device_name")
    assert isinstance(query, ResultQuery)    
    count = 0
    for item in query.all():
        if item.id == "ghijklm":
            assert item.total_results == 2
            assert item.device_id == 314159
        elif item.id == "mnopqrs":
            assert item.total_results == 3
            assert item.device_id == 271828
        else:
            pytest.fail("Invalid object with ID %s seen" % item.id)
        count = count + 1
    assert _was_called
    assert count == 2
示例#8
0
def test_run_delete_failed(monkeypatch):
    _was_called = False
    
    def mock_delete_object(url):
        nonlocal _was_called
        assert url == "/livequery/v1/orgs/Z100/runs/abcdefg"
        _was_called = True
        return MockResponse(None, 403)
    
    api = CbLiveQueryAPI(url="https://example.com", token="ABCD/1234",
                         org_key="Z100", ssl_verify=True)
    run = Run(api, "abcdefg", {"org_key":"Z100", "name":"FoobieBletch",
                                "id":"abcdefg", "status":"ACTIVE"})
    monkeypatch.setattr(api, "get_object", ConnectionMocks.get("GET"))
    monkeypatch.setattr(api, "post_object", ConnectionMocks.get("POST"))
    monkeypatch.setattr(api, "put_object", ConnectionMocks.get("PUT"))
    monkeypatch.setattr(api, "delete_object", mock_delete_object)
    rc = run.delete()
    assert _was_called
    assert rc == False
    assert not run._is_deleted
示例#9
0
def test_query_with_everything(monkeypatch):
    _was_called = False

    def mock_post_object(url, body, **kwargs):
        nonlocal _was_called
        assert url == "/livequery/v1/orgs/Z100/runs"
        assert body["sql"] == "select * from whatever;"
        assert body["name"] == "AmyWasHere"
        assert body["notify_on_finish"] == True
        df = body["device_filter"]
        assert df["device_ids"] == [1, 2, 3]
        assert df["device_types"] == ["Alpha", "Bravo", "Charlie"]
        assert df["policy_ids"] == [16, 27, 38]
        _was_called = True
        return MockResponse({
            "org_key": "Z100",
            "name": "FoobieBletch",
            "id": "abcdefg"
        })

    api = CbLiveQueryAPI(url="https://example.com",
                         token="ABCD/1234",
                         org_key="Z100",
                         ssl_verify=True)
    monkeypatch.setattr(api, "get_object", ConnectionMocks.get("GET"))
    monkeypatch.setattr(api, "post_object", mock_post_object)
    monkeypatch.setattr(api, "put_object", ConnectionMocks.get("PUT"))
    monkeypatch.setattr(api, "delete_object", ConnectionMocks.get("DELETE"))
    query = api.query("select * from whatever;").device_ids([1, 2, 3])
    query = query.device_types(["Alpha", "Bravo", "Charlie"])
    query = query.policy_ids([16, 27, 38])
    query = query.name("AmyWasHere").notify_on_finish()
    assert isinstance(query, RunQuery)
    run = query.submit()
    assert _was_called
    assert run.org_key == "Z100"
    assert run.name == "FoobieBletch"
    assert run.id == "abcdefg"