auv-driver-linux 0.0.22

Linux driver for AUV
use super::*;

#[test]
fn successful_restore_rotates_the_single_use_token_without_a_version_wrapper() {
  let temporary = tempfile::tempdir().expect("temporary directory");
  let store = RestoreTokenStore::new(temporary.path().to_path_buf());

  store
    .rotate(RestoreTokenKind::ScreenCast, |current| {
      assert_eq!(current, None);
      Ok(((), Some("first-opaque-token".to_string())))
    })
    .expect("first authorization token");
  store
    .rotate(RestoreTokenKind::ScreenCast, |current| {
      assert_eq!(current, Some("first-opaque-token"));
      Ok(((), Some("replacement-opaque-token".to_string())))
    })
    .expect("restored authorization token");

  assert_eq!(fs::read_to_string(temporary.path().join("screencast-token")).unwrap(), "replacement-opaque-token");
}

#[test]
fn failed_restore_keeps_the_previous_token_for_a_later_retry() {
  let temporary = tempfile::tempdir().expect("temporary directory");
  let store = RestoreTokenStore::new(temporary.path().to_path_buf());
  store.rotate(RestoreTokenKind::RemoteDesktopInput, |_| Ok(((), Some("input-token".to_string())))).expect("initial token");

  let error = store
    .rotate::<()>(RestoreTokenKind::RemoteDesktopInput, |current| {
      assert_eq!(current, Some("input-token"));
      Err(backend("portal request failed"))
    })
    .expect_err("failed portal request");

  assert!(error.to_string().contains("portal request failed"));
  assert_eq!(fs::read_to_string(temporary.path().join("remote-desktop-input-token")).unwrap(), "input-token");
}

#[test]
fn successful_start_without_a_replacement_removes_a_consumed_token() {
  let temporary = tempfile::tempdir().expect("temporary directory");
  let store = RestoreTokenStore::new(temporary.path().to_path_buf());
  store.rotate(RestoreTokenKind::ScreenCast, |_| Ok(((), Some("old-token".to_string())))).unwrap();

  store
    .rotate(RestoreTokenKind::ScreenCast, |current| {
      assert_eq!(current, Some("old-token"));
      Ok(((), None))
    })
    .expect("successful non-persistent start");

  assert!(!temporary.path().join("screencast-token").exists());
}

#[test]
fn a_new_store_instance_restores_the_durable_token_and_keeps_it_private() {
  use std::os::unix::fs::PermissionsExt;
  let temporary = tempfile::tempdir().unwrap();
  let root = temporary.path().join("portal");
  RestoreTokenStore::new(root.clone()).rotate(RestoreTokenKind::RemoteDesktopInput, |_| Ok(((), Some("first-grant".into())))).unwrap();
  RestoreTokenStore::new(root.clone())
    .rotate(RestoreTokenKind::RemoteDesktopInput, |token| {
      assert_eq!(token, Some("first-grant"));
      Ok(((), Some("rotated-grant".into())))
    })
    .unwrap();
  assert_eq!(fs::read_to_string(root.join("remote-desktop-input-token")).unwrap(), "rotated-grant");
  assert_eq!(fs::metadata(&root).unwrap().permissions().mode() & 0o777, 0o700);
  assert_eq!(fs::metadata(root.join("remote-desktop-input-token")).unwrap().permissions().mode() & 0o777, 0o600);
}