1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
use crate::get_device_from_file;
use cyfs_base::*;
use std::fs;
use std::path::PathBuf;

#[derive(Clone)]
pub struct TestContext {
    meta_endpoint: String,
    test_dir: PathBuf,
    owner_device_desc_path: PathBuf,
    owner_device_id: DeviceId,
    owowner_device: Device,
    owner_private_key: PrivateKey,
    devices: Vec<(Device, PrivateKey)>,
}

impl TestContext {
    pub fn new(
        meta_endpoint: String,
        test_dir: PathBuf,
        peer_desc_path: PathBuf,
        peer_desc: Device,
        peer_secret: PrivateKey,
    ) -> BuckyResult<Self> {
        let peer_id = peer_desc.desc().device_id();

        Ok(TestContext {
            meta_endpoint,
            test_dir,
            owner_device_desc_path: peer_desc_path,
            owner_device_id: peer_id,
            owowner_device: peer_desc,
            owner_private_key: peer_secret,
            devices: Vec::new(),
        })
    }

    pub fn owner_device(&self) -> &Device {
        &self.owowner_device
    }

    pub fn owner_device_desc_path(&self) -> PathBuf {
        self.owner_device_desc_path.clone()
    }

    pub fn owner_device_id(&self) -> DeviceId {
        self.owner_device_id.clone()
    }

    pub fn owner_public_key(&self) -> &PublicKey {
        self.owowner_device.desc().public_key()
    }

    pub fn owner_private_key(&self) -> &PrivateKey {
        &self.owner_private_key
    }

    pub fn test_dir(&self) -> PathBuf {
        self.test_dir.clone()
    }

    pub fn devices(&self) -> &Vec<(Device, PrivateKey)> {
        &self.devices
    }

    pub fn meta_endpoint(&self) -> String {
        self.meta_endpoint.clone()
    }

    pub fn load_devices(&mut self) -> BuckyResult<()> {
        let peer_desc_dir = self.test_dir.join("device_secs");
        info!(
            "load peers info from peer desc dir:{}",
            peer_desc_dir.to_string_lossy()
        );
        for entry in fs::read_dir(&peer_desc_dir)? {
            let entry = entry?;
            let peer_path = entry.path();

            let peer_desc_path = peer_path.join("device");

            info!(
                "load peer desc from peer desc file:{}",
                peer_desc_path.to_string_lossy()
            );
            let (device_desc, secret) = get_device_from_file(
                &peer_desc_path.with_extension("desc"),
                &peer_desc_path.with_extension("sec"),
            )?;

            self.devices.push((device_desc, secret));
        }
        Ok(())
    }
}