Skip to content

Commit af56266

Browse files
ZichengMamarshtompsxd
authored andcommitted
Add more unit tests (#3)
Signed-off-by: Xudong Sun <[email protected]>
1 parent 5b52d89 commit af56266

File tree

8 files changed

+154
-9
lines changed

8 files changed

+154
-9
lines changed

src/unit_tests/kubernetes_api_objects/container.rs

+24
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,30 @@ pub fn test_default(){
169169
assert_eq!(container.into_kube(), deps_hack::k8s_openapi::api::core::v1::Container::default());
170170
}
171171

172+
#[test]
173+
#[verifier(external)]
174+
pub fn test_set_args(){
175+
let mut container = Container::default();
176+
container.set_args(vec![new_strlit("args").to_string()]);
177+
assert_eq!(vec!["args".to_string()], container.into_kube().args.unwrap());
178+
}
179+
180+
#[test]
181+
#[verifier(external)]
182+
pub fn test_set_security_context(){
183+
let mut container = Container::default();
184+
let kube_security_context = deps_hack::k8s_openapi::api::core::v1::SecurityContext {
185+
run_as_user: Some(1000),
186+
run_as_group: Some(1000),
187+
privileged: Some(true),
188+
..Default::default()
189+
};
190+
let security_context = SecurityContext::from_kube(kube_security_context.clone());
191+
192+
container.set_security_context(security_context);
193+
assert_eq!(kube_security_context, container.into_kube().security_context.unwrap());
194+
}
195+
172196
#[test]
173197
#[verifier(external)]
174198
pub fn test_clone(){

src/unit_tests/kubernetes_api_objects/container_port.rs

+39
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,45 @@ pub fn test_set_name() {
3434
assert_eq!("name".to_string(), container_port.into_kube().name.unwrap());
3535
}
3636

37+
#[test]
38+
#[verifier(external)]
39+
pub fn test_name() {
40+
let mut container_port = ContainerPort::default();
41+
let temp = container_port.name();
42+
if !temp.is_none() {
43+
panic!("name should be none");
44+
}
45+
container_port.set_name(new_strlit("name").to_string());
46+
assert_eq!("name".to_string(), container_port.name().unwrap().into_rust_string());
47+
}
48+
49+
#[test]
50+
#[verifier(external)]
51+
pub fn test_container_port() {
52+
let mut container_port = ContainerPort::default();
53+
container_port.set_container_port(8080);
54+
assert_eq!(8080, container_port.container_port());
55+
}
56+
57+
#[test]
58+
#[verifier(external)]
59+
pub fn test_protocol() {
60+
let container_port = ContainerPort::default();
61+
let temp = container_port.protocol();
62+
if !temp.is_none() {
63+
panic!("protocol should be none");
64+
}
65+
let container_port = ContainerPort::from_kube(deps_hack::k8s_openapi::api::core::v1::ContainerPort {
66+
container_port: 8080,
67+
host_ip: Some("host_ip".to_string()),
68+
host_port: Some(8080),
69+
name: Some("name".to_string()),
70+
protocol: Some("protocol".to_string()),
71+
..Default::default()
72+
});
73+
assert_eq!("protocol".to_string(), container_port.protocol().unwrap().into_rust_string());
74+
}
75+
3776
#[test]
3877
#[verifier(external)]
3978
pub fn test_kube() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Copyright 2022 VMware, Inc.
2+
// SPDX-License-Identifier: MIT
3+
use crate::kubernetes_api_objects::exec::affinity::*;
4+
use crate::kubernetes_api_objects::exec::container::*;
5+
use crate::kubernetes_api_objects::exec::object_meta::*;
6+
use crate::kubernetes_api_objects::exec::pod::*;
7+
use crate::kubernetes_api_objects::exec::resource::*;
8+
use crate::kubernetes_api_objects::exec::toleration::*;
9+
use crate::kubernetes_api_objects::exec::volume::*;
10+
use crate::vstd_ext::string_map::*;
11+
use vstd::prelude::*;
12+
use vstd::string::*;
13+
14+
verus! {
15+
// Tests for LocalObjectReference
16+
#[test]
17+
#[verifier(external)]
18+
pub fn test_kube() {
19+
let kube_local_object_reference = deps_hack::k8s_openapi::api::core::v1::LocalObjectReference {
20+
name: Some("name".to_string()),
21+
};
22+
23+
let local_object_reference = LocalObjectReference::from_kube(kube_local_object_reference.clone());
24+
25+
assert_eq!(local_object_reference.into_kube(),
26+
kube_local_object_reference);
27+
}
28+
}

src/unit_tests/kubernetes_api_objects/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ pub mod key_to_path;
2626
pub mod label_selector;
2727
pub mod lifecycle;
2828
pub mod lifecycle_handler;
29+
pub mod local_object_reference;
2930
pub mod object_field_selector;
3031
pub mod object_meta;
3132
pub mod owner_reference;
@@ -45,6 +46,7 @@ pub mod role_ref;
4546
pub mod secret;
4647
pub mod secret_projection;
4748
pub mod secret_volume_source;
49+
pub mod security_context;
4850
pub mod service;
4951
pub mod service_account;
5052
pub mod service_port;

src/unit_tests/kubernetes_api_objects/pod_spec.rs

+21
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,27 @@ pub fn test_set_host_network() {
187187
}
188188

189189

190+
#[test]
191+
#[verifier(external)]
192+
pub fn test_set_image_pull_secrets(){
193+
let mut pod_spec = PodSpec::default();
194+
let kube_local_object_reference = deps_hack::k8s_openapi::api::core::v1::LocalObjectReference {
195+
name: Some("name".to_string()),
196+
};
197+
let local_object_reference = LocalObjectReference::from_kube(kube_local_object_reference.clone());
198+
pod_spec.set_image_pull_secrets(vec![local_object_reference]);
199+
200+
assert_eq!(vec![kube_local_object_reference], pod_spec.into_kube().image_pull_secrets.unwrap());
201+
}
202+
203+
#[test]
204+
#[verifier(external)]
205+
pub fn test_set_termination_grace_period_seconds(){
206+
let mut pod_spec = PodSpec::default();
207+
pod_spec.set_termination_grace_period_seconds(1);
208+
assert_eq!(1, pod_spec.into_kube().termination_grace_period_seconds.unwrap());
209+
}
210+
190211
#[test]
191212
#[verifier(external)]
192213
pub fn test_kube() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright 2022 VMware, Inc.
2+
// SPDX-License-Identifier: MIT
3+
use crate::kubernetes_api_objects::exec::container::*;
4+
use crate::kubernetes_api_objects::exec::object_meta::*;
5+
use crate::kubernetes_api_objects::exec::resource::*;
6+
use crate::kubernetes_api_objects::exec::volume::*;
7+
use crate::vstd_ext::string_map::*;
8+
use vstd::prelude::*;
9+
use vstd::string::*;
10+
11+
verus! {
12+
// Tests for SecurityContext
13+
#[test]
14+
#[verifier(external)]
15+
pub fn test_kube(){
16+
let kube_security_context = deps_hack::k8s_openapi::api::core::v1::SecurityContext {
17+
privileged: Some(true),
18+
..Default::default()
19+
};
20+
21+
let security_context = SecurityContext::from_kube(kube_security_context.clone());
22+
23+
assert_eq!(security_context.into_kube(),
24+
kube_security_context);
25+
}
26+
}

src/unit_tests/kubernetes_api_objects/service_port.rs

+8
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,14 @@ pub fn test_set_app_protocol() {
4343
assert_eq!("protocol".to_string(), service_port.into_kube().app_protocol.unwrap());
4444
}
4545

46+
#[test]
47+
#[verifier(external)]
48+
pub fn test_set_protocaol() {
49+
let mut service_port = ServicePort::default();
50+
service_port.set_protocol(new_strlit("protocol").to_string());
51+
assert_eq!("protocol".to_string(), service_port.into_kube().protocol.unwrap());
52+
}
53+
4654
#[test]
4755
#[verifier(external)]
4856
pub fn test_kube() {

tools/count-tests.py

+6-9
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,9 @@ def camel_to_snake(name):
6161
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()
6262

6363
def main():
64-
api_directory_path = 'src/kubernetes_api_objects' # Update this path if needed
64+
api_directory_path = 'src/kubernetes_api_objects/exec' # Update this path if needed
6565
test_directory_path = 'src/unit_tests/kubernetes_api_objects'
66+
flag = True
6667
for filename in sorted(os.listdir(api_directory_path)): # loop through all files in api_directory_path
6768
if filename.endswith('.rs'):
6869
file_path = os.path.join(api_directory_path, filename)
@@ -82,19 +83,15 @@ def main():
8283
count_external_body, count_external_pub_fn, count_external_fn = count_functions(file_path)
8384
total_count = count_external_body + count_external_pub_fn + count_external_fn
8485

86+
8587
if total_count != test_count:
88+
flag = False
8689
print(f"{filename}: Total Count = {total_count}")
8790
print("Test Count = ", test_count)
8891
print("ERROR: Test Count != Total Count")
8992
print(struct_count)
9093
print("-------------------------------------------")
91-
elif total_count == 0:
92-
print(f"{filename}: Total Count = {total_count}")
93-
print("-------------------------------------------")
94-
else:
95-
print(f"{filename}: Total Count = {total_count}")
96-
print("Test Count = ", test_count)
97-
print("Test coverage:", round(test_count / total_count * 100, 2), "%")
98-
print("-------------------------------------------")
94+
if flag:
95+
print("All functions are covered!")
9996
if __name__ == "__main__":
10097
main()

0 commit comments

Comments
 (0)