chiark / gitweb /
accounts: Add test for PermSet
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 19 May 2021 20:32:17 +0000 (21:32 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 19 May 2021 21:01:40 +0000 (22:01 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/accounts.rs
src/spec.rs

index ca509f406e47806f26f2d3ae88fa2f4ee54be1e3..3ea5c893396898d6f4bd8710016b8b70a028d016 100644 (file)
@@ -598,4 +598,26 @@ pub mod loaded_acl {
       ).collect() }
     }
   }
+
+  #[test]
+  fn perm_set() {
+    for p in TablePermission::iter() {
+      let acl = Acl { ents: vec![ AclEntry {
+        account_glob: "foo".to_string(),
+        allow: [p].iter().cloned().collect(),
+        deny: default(),
+      }]};
+      let lacl: LoadedAcl<_> = acl.into();
+      let eacl = EffectiveACL {
+        owner_account: None,
+        acl: &lacl,
+      };
+
+      for q in TablePermission::iter() {
+        let auth = eacl.check("foo", [q].into());
+        assert_eq!( auth.is_ok(), p == q,
+                    "{:?} {:?} {:?}", p, q, auth);
+      }
+    }
+  }
 }
index f8f5c141640814e661860f2acac322b1984f9a17..30f11487ad8b7245d28fdbe6c739b0fd6fa943cd 100644 (file)
@@ -17,7 +17,7 @@ use fehler::{throw,throws};
 use index_vec::{define_index_type, IndexVec};
 use num_derive::{FromPrimitive, ToPrimitive};
 use serde::{Deserialize, Serialize};
-use strum::{EnumString, Display};
+use strum::{Display, EnumIter, EnumString};
 use thiserror::Error;
 
 use otter_base::geometry::{Coord,Pos};
@@ -127,7 +127,7 @@ pub struct AclEntry<Perm: Eq + Hash> {
 
 #[derive(Debug,Clone,Copy,Serialize,Deserialize)]
 #[derive(Hash,Eq,PartialEq,Ord,PartialOrd)]
-#[derive(FromPrimitive,ToPrimitive)]
+#[derive(FromPrimitive,ToPrimitive,EnumIter)]
 pub enum TablePermission {
   TestExistence,
   ShowInList,