about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--library/std/src/sys/unix/ext/ucred.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/library/std/src/sys/unix/ext/ucred.rs b/library/std/src/sys/unix/ext/ucred.rs
index efaa4d94437..c737a6a34fd 100644
--- a/library/std/src/sys/unix/ext/ucred.rs
+++ b/library/std/src/sys/unix/ext/ucred.rs
@@ -87,3 +87,23 @@ pub mod impl_bsd {
         }
     }
 }
+
+#[cfg(test)]
+mod test {
+    use crate::os::unix::net::UnixStream;
+    use libc::{getegid, geteuid};
+
+    #[test]
+    fn test_socket_pair() {
+        // Create two connected sockets and get their peer credentials. They should be equal.
+        let (sock_a, sock_b) = UnixStream::pair().unwrap();
+        let (cred_a, cred_b) = (sock_a.peer_cred().unwrap(), sock_b.peer_cred().unwrap());
+        assert_eq!(cred_a, cred_b);
+
+        // Check that the UID and GIDs match up.
+        let uid = unsafe { geteuid() };
+        let gid = unsafe { getegid() };
+        assert_eq!(cred_a.uid, uid);
+        assert_eq!(cred_a.gid, gid);
+    }
+}