Exemplo n.º 1
0
def test_add_single_stub(shared_datadir, tmp_path):
    """should add a single stub"""
    stub_path = shared_datadir / 'esp8266_test_stub'
    manager = stubs.StubManager()
    manager.add(stub_path, dest=tmp_path)
    assert len(manager) == 1
    assert stub_path.name in [d.name for d in tmp_path.iterdir()]
Exemplo n.º 2
0
def test_stub_validation(shared_datadir):
    """should pass validation"""
    stub_path = shared_datadir / 'esp8266_test_stub'
    manager = stubs.StubManager()
    manager.validate(stub_path)
    assert manager.is_valid(stub_path)
    assert not manager.is_valid(Path('/foobar/bar'))
Exemplo n.º 3
0
def test_stub_search(mocker, test_urls, shared_datadir, tmp_path, test_repo):
    test_fware = shared_datadir / 'fware_test_stub'
    test_stub = shared_datadir / 'esp8266_test_stub'
    mock_results = [
        "packages/esp8266-micropython-1.9.4.tar.gz",
        "packages/esp32-micropython-1.11.0.tar.gz"
    ]
    mock_search = mocker.patch.object(stubs.source.utils, 'search_xml')
    mock_search.return_value = mock_results
    tmp_path = tmp_path / 'foobar'
    tmp_path.mkdir()
    manager = stubs.StubManager(resource=tmp_path, repos=[test_repo])
    manager.add(test_fware)
    print(manager._firmware)
    print(list(manager))
    manager.add(test_stub)
    results = manager.search_remote("esp8266")
    assert len(results) == 1
    res = results[0]
    assert res[0] == "esp8266-micropython-1.9.4"
    assert res[1]
    results = manager.search_remote("esp32")
    res = results[0]
    assert res[0] == "esp32-micropython-1.11.0"
    assert not res[1]
Exemplo n.º 4
0
def test_resolve_firmware(tmp_path, shared_datadir):
    """should resolve firmware"""
    device_stub = shared_datadir / 'esp8266_test_stub'
    fware_stub_path = shared_datadir / 'fware_test_stub'
    manager = stubs.StubManager(resource=tmp_path)
    fware_stub = manager.add(fware_stub_path)
    dev_stub = stubs.stubs.DeviceStub(device_stub)
    resolved = manager.resolve_firmware(dev_stub)
    assert fware_stub == resolved
Exemplo n.º 5
0
def test_add_stubs_from_dir(datadir, tmp_path):
    """should add all valid stubs in directory"""
    manager = stubs.StubManager()
    manager.add(datadir, dest=tmp_path)
    assert len(manager) == 2
    assert len(list(tmp_path.iterdir())) - 1 == len(manager)
    assert manager._should_recurse(datadir)
    with pytest.raises(exceptions.StubError):
        empty_path = tmp_path / 'empty'
        empty_path.mkdir()
        manager._should_recurse(empty_path)
Exemplo n.º 6
0
def test_bad_stub_validation(shared_datadir, mocker):
    """should fail validation"""
    stub_path = shared_datadir / 'esp8266_test_stub'
    manager = stubs.StubManager()
    mock_validate = mocker.patch.object(stubs.stubs.utils, "Validator")
    mock_validate.return_value.validate.side_effect = [
        Exception, FileNotFoundError
    ]
    with pytest.raises(exceptions.StubValidationError):
        manager.validate(stub_path)
    with pytest.raises(exceptions.StubError):
        manager.validate(Path("/foobar/foo"))
Exemplo n.º 7
0
def test_iter_by_firm_stubs(mocker):
    """should iter stubs by firmware"""
    firm_stub = mocker.MagicMock()
    dev_stub = mocker.MagicMock()
    dev_stub.firmware = firm_stub
    unk_stub = mocker.MagicMock()
    unk_stub.firmware = None
    manager = stubs.StubManager()
    manager._loaded = set([firm_stub, dev_stub, unk_stub])
    manager._firmware = set([firm_stub])
    stub_iter = list(manager.iter_by_firmware())
    assert stub_iter == [(firm_stub, [dev_stub]), ('Unknown', [unk_stub])]
Exemplo n.º 8
0
def test_resolve_stub(shared_datadir):
    """should resolve correct stub type"""
    device_stub = shared_datadir / 'esp8266_test_stub'
    fware_stub = shared_datadir / 'fware_test_stub'
    invalid_stub = shared_datadir / 'esp8266_invalid_stub'
    manager = stubs.StubManager()
    stub_type = manager._get_stubtype(device_stub)
    assert stub_type == stubs.stubs.DeviceStub
    stub_type = manager._get_stubtype(fware_stub)
    assert stub_type == stubs.stubs.FirmwareStub
    with pytest.raises(exceptions.StubError):
        manager._get_stubtype(Path('/foobar/foo'))
    with pytest.raises(exceptions.StubValidationError):
        manager._get_stubtype(invalid_stub)
Exemplo n.º 9
0
def test_add_with_resource(datadir, mock_fware, tmp_path, mocker):
    """should not require dest kwarg"""
    resource = tmp_path / 'tmp_resource'
    resource.mkdir()
    load_spy = mocker.spy(stubs.StubManager, '_load')
    manager = stubs.StubManager(resource=resource)
    manager.add(datadir)
    assert len(manager) == 2
    assert "esp8266_test_stub" in [p.name for p in resource.iterdir()]
    assert load_spy.call_count == 5
    # Should not add any new stubs
    assert manager.add(datadir)
    assert load_spy.call_count == 5
    # Should force load
    assert manager.add(datadir, force=True)
    assert load_spy.call_count == 10
Exemplo n.º 10
0
def test_load_firmware_first(mocker, tmp_path, shared_datadir):
    """should always load firmware first"""
    mock_manager = mocker.patch.object(stubs.StubManager, "_load")
    mock_iterdir = mocker.patch.object(stubs.stubs.Path, 'iterdir')
    # mock_mgr = mock_manager.return_value
    tmp_path = tmp_path / 'fware_first_test'
    tmp_resource = tmp_path / 'tmp_resource'
    tmp_resource.mkdir(parents=True)
    test_stub = shared_datadir / 'esp32_test_stub'
    test_fware = shared_datadir / 'fware_test_stub'
    # Ensure Firmware loads first, regardless of how Path.iterdir() orders it
    shutil.copytree(test_stub, (tmp_path / '99_esp32_test_stub'))
    shutil.copytree(test_fware, (tmp_path / '00_fware_test_stub'))
    mock_iterdir.return_value = (test_stub, test_fware)
    manager = stubs.StubManager(resource=tmp_resource)
    manager.load_from(tmp_path)
    # Get First call args
    fargs, _ = mock_manager.call_args_list[0]
    assert fargs[0].location == test_fware
Exemplo n.º 11
0
def test_stub_search(mocker, test_urls, shared_datadir, tmp_path, test_repo):
    test_fware = shared_datadir / 'fware_test_stub'
    test_stub = shared_datadir / 'esp8266_test_stub'
    tmp_path = tmp_path / 'foobar'
    tmp_path.mkdir()
    manager = stubs.StubManager(resource=tmp_path, repos=[test_repo])
    manager.add(test_fware)
    print(manager._firmware)
    print(list(manager))
    manager.add(test_stub)
    results = manager.search_remote("esp8266")
    assert len(results) == 1
    res = results[0]
    assert res[0] == "esp8266-micropython-1.9.4"
    assert res[1]
    results = manager.search_remote("esp32")
    res = results[0]
    assert res[0] == "esp32-micropython-1.11.0"
    assert not res[1]
Exemplo n.º 12
0
def test_loads_from_resource(datadir, mock_fware):
    """should load from resource if provided"""
    manager = stubs.StubManager(resource=datadir)
    assert len(manager) == 2
Exemplo n.º 13
0
def test_add_no_resource_no_dest(datadir, mock_fware):
    """should fail with typeerror"""
    manager = stubs.StubManager()
    with pytest.raises(TypeError):
        manager.add(datadir)