8
8
/// See also <https://google.github.io/googletest/advanced.html>
9
9
use std:: cell:: OnceCell ;
10
10
use std:: env:: { var, var_os} ;
11
- use std:: ffi:: OsStr ;
11
+ use std:: ffi:: { OsStr , OsString } ;
12
12
use std:: fs:: { self , File } ;
13
13
use std:: num:: NonZeroU64 ;
14
14
use std:: path:: { Path , PathBuf } ;
15
15
16
16
/// Environment variable specifying the total number of test shards.
17
- const TEST_TOTAL_SHARDS : & str = "GTEST_TOTAL_SHARDS" ;
17
+ const TEST_TOTAL_SHARDS : & [ & str ] = & [ "GTEST_TOTAL_SHARDS" , "TEST_TOTAL_SHARDS" ] ;
18
18
19
19
/// Environment variable specifyign the index of this test shard.
20
- const TEST_SHARD_INDEX : & str = "GTEST_SHARD_INDEX" ;
20
+ const TEST_SHARD_INDEX : & [ & str ] = & [ "GTEST_SHARD_INDEX" , "TEST_SHARD_INDEX" ] ;
21
21
22
22
/// Environment variable specifying the name of the file we create (or cause a
23
23
/// timestamp change on) to indicate that we support the sharding protocol.
24
- const TEST_SHARD_STATUS_FILE : & str = "GTEST_SHARD_STATUS_FILE" ;
24
+ const TEST_SHARD_STATUS_FILE : & [ & str ] = & [ "GTEST_SHARD_STATUS_FILE" , "TEST_SHARD_STATUS_FILE" ] ;
25
25
26
26
thread_local ! {
27
27
static SHARDING : OnceCell <Sharding > = const { OnceCell :: new( ) } ;
@@ -44,29 +44,47 @@ pub fn test_should_run(test_case_hash: u64) -> bool {
44
44
} )
45
45
}
46
46
47
+ fn get_var ( keys : & [ & str ] ) -> Option < String > {
48
+ for key in keys {
49
+ if let Ok ( value) = var ( OsStr :: new ( key) ) {
50
+ return Some ( value) ;
51
+ }
52
+ }
53
+
54
+ None
55
+ }
56
+
57
+ fn get_var_os ( keys : & [ & str ] ) -> Option < OsString > {
58
+ for key in keys {
59
+ if let Some ( value) = var_os ( OsStr :: new ( key) ) {
60
+ return Some ( value) ;
61
+ }
62
+ }
63
+
64
+ None
65
+ }
66
+
47
67
impl Sharding {
48
68
fn test_should_run ( & self , test_case_hash : u64 ) -> bool {
49
69
( test_case_hash % self . total_shards . get ( ) ) == self . this_shard
50
70
}
51
71
52
72
fn from_environment ( ) -> Sharding {
53
73
let this_shard: Option < u64 > =
54
- { var ( OsStr :: new ( TEST_SHARD_INDEX ) ) . ok ( ) . and_then ( |value| value. parse ( ) . ok ( ) ) } ;
74
+ { get_var ( TEST_SHARD_INDEX ) . and_then ( |value| value. parse ( ) . ok ( ) ) } ;
55
75
let total_shards: Option < NonZeroU64 > = {
56
- var ( OsStr :: new ( TEST_TOTAL_SHARDS ) )
57
- . ok ( )
76
+ get_var ( TEST_TOTAL_SHARDS )
58
77
. and_then ( |value| value. parse ( ) . ok ( ) )
59
78
. and_then ( NonZeroU64 :: new)
60
79
} ;
61
80
62
81
match ( this_shard, total_shards) {
63
82
( Some ( this_shard) , Some ( total_shards) ) if this_shard < total_shards. get ( ) => {
64
- if let Some ( name) = var_os ( OsStr :: new ( TEST_SHARD_STATUS_FILE ) ) {
83
+ if let Some ( name) = get_var_os ( TEST_SHARD_STATUS_FILE ) {
65
84
let pathbuf = PathBuf :: from ( name) ;
66
85
if let Err ( e) = create_status_file ( & pathbuf) {
67
86
eprintln ! (
68
- "failed to create {} file {}: {}" ,
69
- TEST_SHARD_STATUS_FILE ,
87
+ "failed to create $GTEST_SHARD_STATUS_FILE file {}: {}" ,
70
88
pathbuf. display( ) ,
71
89
e
72
90
) ;
0 commit comments