@@ -8,6 +8,7 @@ use cargo_test_support::publish::validate_alt_upload;
8
8
use cargo_test_support:: registry:: { self , Package , RegistryBuilder } ;
9
9
use cargo_test_support:: str;
10
10
use cargo_test_support:: { basic_manifest, paths, project} ;
11
+ use rand:: Rng ;
11
12
12
13
#[ cargo_test]
13
14
fn depend_on_alt_registry ( ) {
@@ -1985,3 +1986,187 @@ fn empty_dependency_registry() {
1985
1986
"# ] ] )
1986
1987
. run ( ) ;
1987
1988
}
1989
+
1990
+ #[ cargo_test]
1991
+ fn token_error_messages ( ) {
1992
+ enum TokenStatus {
1993
+ Valid ,
1994
+ Missing ,
1995
+ InvalidHasScheme ,
1996
+ InvalidNoScheme ,
1997
+ }
1998
+ struct TokenTest {
1999
+ crates_io_token : TokenStatus ,
2000
+ alternative_token : TokenStatus ,
2001
+ expected_message : & ' static str ,
2002
+ }
2003
+
2004
+ let tests = [
2005
+ // TokenTest {
2006
+ // crates_io_token: TokenStatus::Valid,
2007
+ // alternative_token: TokenStatus::Valid,
2008
+ // expected_message: "",
2009
+ // },
2010
+ // TokenTest {
2011
+ // crates_io_token: TokenStatus::Valid,
2012
+ // alternative_token: TokenStatus::Missing,
2013
+ // expected_message: "",
2014
+ // },
2015
+ // TokenTest {
2016
+ // crates_io_token: TokenStatus::Valid,
2017
+ // alternative_token: TokenStatus::InvalidHasScheme,
2018
+ // expected_message: "",
2019
+ // },
2020
+ // TokenTest {
2021
+ // crates_io_token: TokenStatus::Valid,
2022
+ // alternative_token: TokenStatus::InvalidNoScheme,
2023
+ // expected_message: "",
2024
+ // },
2025
+ // TokenTest {
2026
+ // crates_io_token: TokenStatus::Missing,
2027
+ // alternative_token: TokenStatus::Valid,
2028
+ // expected_message: "",
2029
+ // },
2030
+ // TokenTest {
2031
+ // crates_io_token: TokenStatus::Missing,
2032
+ // alternative_token: TokenStatus::Missing,
2033
+ // expected_message: "",
2034
+ // },
2035
+ // TokenTest {
2036
+ // crates_io_token: TokenStatus::Missing,
2037
+ // alternative_token: TokenStatus::InvalidHasScheme,
2038
+ // expected_message: "",
2039
+ // },
2040
+ TokenTest {
2041
+ crates_io_token : TokenStatus :: Missing ,
2042
+ alternative_token : TokenStatus :: InvalidNoScheme ,
2043
+ expected_message : " token rejected for `alternative`, please run `cargo login --registry alternative`\n or use environment variable CARGO_REGISTRIES_ALTERNATIVE_TOKEN" ,
2044
+ } ,
2045
+ // TokenTest {
2046
+ // crates_io_token: TokenStatus::InvalidHasScheme,
2047
+ // alternative_token: TokenStatus::Valid,
2048
+ // expected_message: "",
2049
+ // },
2050
+ // TokenTest {
2051
+ // crates_io_token: TokenStatus::InvalidHasScheme,
2052
+ // alternative_token: TokenStatus::Missing,
2053
+ // expected_message: "",
2054
+ // },
2055
+ // TokenTest {
2056
+ // crates_io_token: TokenStatus::InvalidHasScheme,
2057
+ // alternative_token: TokenStatus::InvalidHasScheme,
2058
+ // expected_message: "",
2059
+ // },
2060
+ // TokenTest {
2061
+ // crates_io_token: TokenStatus::InvalidHasScheme,
2062
+ // alternative_token: TokenStatus::InvalidNoScheme,
2063
+ // expected_message: "",
2064
+ // },
2065
+ // TokenTest {
2066
+ // crates_io_token: TokenStatus::InvalidNoScheme,
2067
+ // alternative_token: TokenStatus::Valid,
2068
+ // expected_message: "",
2069
+ // },
2070
+ // TokenTest {
2071
+ // crates_io_token: TokenStatus::InvalidNoScheme,
2072
+ // alternative_token: TokenStatus::Missing,
2073
+ // expected_message: "",
2074
+ // },
2075
+ // TokenTest {
2076
+ // crates_io_token: TokenStatus::InvalidNoScheme,
2077
+ // alternative_token: TokenStatus::InvalidHasScheme,
2078
+ // expected_message: "",
2079
+ // },
2080
+ // TokenTest {
2081
+ // crates_io_token: TokenStatus::InvalidNoScheme,
2082
+ // alternative_token: TokenStatus::InvalidNoScheme,
2083
+ // expected_message: "",
2084
+ // },
2085
+ ] ;
2086
+
2087
+ let unmatchable_token = rand:: rng ( )
2088
+ . sample_iter ( & rand:: distr:: Alphanumeric )
2089
+ . take ( 8 )
2090
+ . map ( char:: from)
2091
+ . collect :: < String > ( ) ;
2092
+
2093
+ for test in & tests {
2094
+ let crates_io_builder = RegistryBuilder :: new ( )
2095
+ . http_api ( )
2096
+ . http_index ( )
2097
+ . credential_provider ( & [ & "cargo:token" ] )
2098
+ . auth_required ( ) ;
2099
+ let alternative_builder = RegistryBuilder :: new ( )
2100
+ . http_api ( )
2101
+ . http_index ( )
2102
+ . credential_provider ( & [ & "cargo:token" ] )
2103
+ . alternative ( )
2104
+ . auth_required ( ) ;
2105
+
2106
+ let crates_io_mock = match test. crates_io_token {
2107
+ TokenStatus :: Valid => crates_io_builder. build ( ) ,
2108
+ TokenStatus :: Missing => crates_io_builder. no_configure_token ( ) . build ( ) ,
2109
+ TokenStatus :: InvalidHasScheme => crates_io_builder
2110
+ . token ( cargo_test_support:: registry:: Token :: Plaintext (
2111
+ "Bearer <TOKEN>" . to_string ( ) ,
2112
+ ) )
2113
+ . server_token ( cargo_test_support:: registry:: Token :: Plaintext (
2114
+ unmatchable_token. clone ( ) ,
2115
+ ) )
2116
+ . build ( ) ,
2117
+ TokenStatus :: InvalidNoScheme => crates_io_builder
2118
+ . token ( cargo_test_support:: registry:: Token :: Plaintext (
2119
+ "<TOKEN>>" . to_string ( ) ,
2120
+ ) )
2121
+ . server_token ( cargo_test_support:: registry:: Token :: Plaintext (
2122
+ unmatchable_token. clone ( ) ,
2123
+ ) )
2124
+ . build ( ) ,
2125
+ } ;
2126
+ let alternative_mock = match test. alternative_token {
2127
+ TokenStatus :: Valid => alternative_builder. build ( ) ,
2128
+ TokenStatus :: Missing => alternative_builder. no_configure_token ( ) . build ( ) ,
2129
+ TokenStatus :: InvalidHasScheme => alternative_builder
2130
+ . token ( cargo_test_support:: registry:: Token :: Plaintext (
2131
+ "Bearer <TOKEN>" . to_string ( ) ,
2132
+ ) )
2133
+ . server_token ( cargo_test_support:: registry:: Token :: Plaintext (
2134
+ unmatchable_token. clone ( ) ,
2135
+ ) )
2136
+ . build ( ) ,
2137
+ TokenStatus :: InvalidNoScheme => alternative_builder
2138
+ . token ( cargo_test_support:: registry:: Token :: Plaintext (
2139
+ "<TOKEN>>" . to_string ( ) ,
2140
+ ) )
2141
+ . server_token ( cargo_test_support:: registry:: Token :: Plaintext (
2142
+ unmatchable_token. clone ( ) ,
2143
+ ) )
2144
+ . build ( ) ,
2145
+ } ;
2146
+
2147
+ let p = project ( )
2148
+ . file (
2149
+ "Cargo.toml" ,
2150
+ r#"
2151
+ [package]
2152
+ name = "foo"
2153
+ version = "0.0.1"
2154
+ authors = []
2155
+ edition = "2015"
2156
+
2157
+ [dependencies.bar]
2158
+ version = "0.0.1"
2159
+ registry = "alternative"
2160
+ "# ,
2161
+ )
2162
+ . file ( "src/main.rs" , "fn main() {}" )
2163
+ . build ( ) ;
2164
+
2165
+ Package :: new ( "bar" , "0.0.1" ) . alternative ( true ) . publish ( ) ;
2166
+ p. cargo ( "build" )
2167
+ . replace_crates_io ( crates_io_mock. index_url ( ) )
2168
+ . with_status ( 101 )
2169
+ . with_stderr_contains ( test. expected_message )
2170
+ . run ( ) ;
2171
+ }
2172
+ }
0 commit comments