dkregistry 0.5.0

A pure-Rust asynchronous library for Docker Registry API
Documentation
extern crate dkregistry;
extern crate tokio;

use self::tokio::runtime::Runtime;

static REGISTRY: &'static str = "registry-1.docker.io";

fn get_env() -> Option<(String, String)> {
    let user = ::std::env::var("DKREG_DOCKER_USER");
    let password = ::std::env::var("DKREG_DOCKER_PASSWD");
    match (user, password) {
        (Ok(u), Ok(t)) => Some((u, t)),
        _ => None,
    }
}

#[test]
fn test_dockerio_getenv() {
    if get_env().is_none() {
        println!(
            "[WARN] {}: missing DKREG_DOCKER_USER / DKREG_DOCKER_PASSWD",
            REGISTRY
        );
    }
}

#[test]
fn test_dockerio_base() {
    let (user, password) = match get_env() {
        Some(t) => t,
        None => return,
    };

    let mut runtime = Runtime::new().unwrap();
    let dclient = dkregistry::v2::Client::configure()
        .registry(REGISTRY)
        .insecure_registry(false)
        .username(Some(user))
        .password(Some(password))
        .build()
        .unwrap();

    let futcheck = dclient.is_v2_supported();

    let res = runtime.block_on(futcheck).unwrap();
    assert_eq!(res, true);
}

#[test]
fn test_dockerio_insecure() {
    let mut runtime = Runtime::new().unwrap();
    let dclient = dkregistry::v2::Client::configure()
        .registry(REGISTRY)
        .insecure_registry(true)
        .username(None)
        .password(None)
        .build()
        .unwrap();

    let futcheck = dclient.is_v2_supported();

    let res = runtime.block_on(futcheck).unwrap();
    assert_eq!(res, true);
}

#[test]
fn test_dockerio_anonymous_auth() {
    let mut runtime = Runtime::new().unwrap();
    let image = "library/alpine";
    let version = "latest";
    let login_scope = format!("repository:{}:pull", image);
    let scopes = vec![login_scope.as_str()];
    let dclient_future = dkregistry::v2::Client::configure()
        .registry(REGISTRY)
        .insecure_registry(false)
        .username(None)
        .password(None)
        .build()
        .unwrap()
        .authenticate(scopes.as_slice());

    let dclient = runtime.block_on(dclient_future).unwrap();
    let futcheck = dclient.get_manifest(image, version);

    let res = runtime.block_on(futcheck);
    assert_eq!(res.is_ok(), true);
}