@@ -800,7 +800,7 @@ private void installPlugin(MockTerminal terminal, boolean isBatch) throws Except
800
800
skipJarHellCommand .execute (terminal , pluginZip , isBatch , env .v2 ());
801
801
}
802
802
803
- void assertInstallPluginFromUrl (String pluginId , String name , String url , String stagingHash ,
803
+ void assertInstallPluginFromUrl (String pluginId , String name , String url , String stagingHash , boolean isSnapshot ,
804
804
String shaExtension , Function <byte [], String > shaCalculator ) throws Exception {
805
805
Tuple <Path , Environment > env = createEnv (fs , temp );
806
806
Path pluginDir = createPluginDir (temp );
@@ -834,6 +834,12 @@ boolean urlExists(Terminal terminal, String urlString) throws IOException {
834
834
String getStagingHash () {
835
835
return stagingHash ;
836
836
}
837
+
838
+ @ Override
839
+ boolean isSnapshot () {
840
+ return isSnapshot ;
841
+ }
842
+
837
843
@ Override
838
844
void jarHellCheck (PluginInfo candidateInfo , Path candidate , Path pluginsDir , Path modulesDir ) throws Exception {
839
845
// no jarhell check
@@ -843,64 +849,98 @@ void jarHellCheck(PluginInfo candidateInfo, Path candidate, Path pluginsDir, Pat
843
849
assertPlugin (name , pluginDir , env .v2 ());
844
850
}
845
851
846
- public void assertInstallPluginFromUrl (String pluginId , String name , String url , String stagingHash ) throws Exception {
852
+ public void assertInstallPluginFromUrl (
853
+ final String pluginId , final String name , final String url , final String stagingHash , boolean isSnapshot ) throws Exception {
847
854
MessageDigest digest = MessageDigest .getInstance ("SHA-512" );
848
- assertInstallPluginFromUrl (pluginId , name , url , stagingHash , ".sha512" , checksumAndFilename (digest , url ));
855
+ assertInstallPluginFromUrl (pluginId , name , url , stagingHash , isSnapshot , ".sha512" , checksumAndFilename (digest , url ));
849
856
}
850
857
851
858
public void testOfficalPlugin () throws Exception {
852
859
String url = "https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-" + Version .CURRENT + ".zip" ;
853
- assertInstallPluginFromUrl ("analysis-icu" , "analysis-icu" , url , null );
860
+ assertInstallPluginFromUrl ("analysis-icu" , "analysis-icu" , url , null , false );
861
+ }
862
+
863
+ public void testOfficialPluginSnapshot () throws Exception {
864
+ String url = String .format (
865
+ Locale .ROOT ,
866
+ "https://snapshots.elastic.co/%s-abc123/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-%s.zip" ,
867
+ Version .CURRENT ,
868
+ Version .displayVersion (Version .CURRENT , true ));
869
+ assertInstallPluginFromUrl ("analysis-icu" , "analysis-icu" , url , "abc123" , true );
870
+ }
871
+
872
+ public void testInstallReleaseBuildOfPluginOnSnapshotBuild () {
873
+ String url = String .format (
874
+ Locale .ROOT ,
875
+ "https://snapshots.elastic.co/%s-abc123/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-%s.zip" ,
876
+ Version .CURRENT ,
877
+ Version .displayVersion (Version .CURRENT , true ));
878
+ // attemping to install a release build of a plugin (no staging ID) on a snapshot build should throw a user exception
879
+ final UserException e =
880
+ expectThrows (UserException .class , () -> assertInstallPluginFromUrl ("analysis-icu" , "analysis-icu" , url , null , true ));
881
+ assertThat (e .exitCode , equalTo (ExitCodes .CONFIG ));
882
+ assertThat (
883
+ e , hasToString (containsString ("attempted to install release build of official plugin on snapshot build of Elasticsearch" )));
854
884
}
855
885
856
886
public void testOfficalPluginStaging () throws Exception {
857
887
String url = "https://staging.elastic.co/" + Version .CURRENT + "-abc123/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-"
858
888
+ Version .CURRENT + ".zip" ;
859
- assertInstallPluginFromUrl ("analysis-icu" , "analysis-icu" , url , "abc123" );
889
+ assertInstallPluginFromUrl ("analysis-icu" , "analysis-icu" , url , "abc123" , false );
860
890
}
861
891
862
892
public void testOfficalPlatformPlugin () throws Exception {
863
893
String url = "https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-" + Platforms .PLATFORM_NAME +
864
894
"-" + Version .CURRENT + ".zip" ;
865
- assertInstallPluginFromUrl ("analysis-icu" , "analysis-icu" , url , null );
895
+ assertInstallPluginFromUrl ("analysis-icu" , "analysis-icu" , url , null , false );
896
+ }
897
+
898
+ public void testOfficialPlatformPluginSnapshot () throws Exception {
899
+ String url = String .format (
900
+ Locale .ROOT ,
901
+ "https://snapshots.elastic.co/%s-abc123/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-%s-%s.zip" ,
902
+ Version .CURRENT ,
903
+ Platforms .PLATFORM_NAME ,
904
+ Version .displayVersion (Version .CURRENT , true ));
905
+ assertInstallPluginFromUrl ("analysis-icu" , "analysis-icu" , url , "abc123" , true );
866
906
}
867
907
868
908
public void testOfficalPlatformPluginStaging () throws Exception {
869
909
String url = "https://staging.elastic.co/" + Version .CURRENT + "-abc123/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-"
870
910
+ Platforms .PLATFORM_NAME + "-" + Version .CURRENT + ".zip" ;
871
- assertInstallPluginFromUrl ("analysis-icu" , "analysis-icu" , url , "abc123" );
911
+ assertInstallPluginFromUrl ("analysis-icu" , "analysis-icu" , url , "abc123" , false );
872
912
}
873
913
874
914
public void testMavenPlugin () throws Exception {
875
915
String url = "https://repo1.maven.org/maven2/mygroup/myplugin/1.0.0/myplugin-1.0.0.zip" ;
876
- assertInstallPluginFromUrl ("mygroup:myplugin:1.0.0" , "myplugin" , url , null );
916
+ assertInstallPluginFromUrl ("mygroup:myplugin:1.0.0" , "myplugin" , url , null , false );
877
917
}
878
918
879
919
public void testMavenPlatformPlugin () throws Exception {
880
920
String url = "https://repo1.maven.org/maven2/mygroup/myplugin/1.0.0/myplugin-" + Platforms .PLATFORM_NAME + "-1.0.0.zip" ;
881
- assertInstallPluginFromUrl ("mygroup:myplugin:1.0.0" , "myplugin" , url , null );
921
+ assertInstallPluginFromUrl ("mygroup:myplugin:1.0.0" , "myplugin" , url , null , false );
882
922
}
883
923
884
924
public void testMavenSha1Backcompat () throws Exception {
885
925
String url = "https://repo1.maven.org/maven2/mygroup/myplugin/1.0.0/myplugin-1.0.0.zip" ;
886
926
MessageDigest digest = MessageDigest .getInstance ("SHA-1" );
887
- assertInstallPluginFromUrl ("mygroup:myplugin:1.0.0" , "myplugin" , url , null , ".sha1" , checksum (digest ));
927
+ assertInstallPluginFromUrl ("mygroup:myplugin:1.0.0" , "myplugin" , url , null , false , ".sha1" , checksum (digest ));
888
928
assertTrue (terminal .getOutput (), terminal .getOutput ().contains ("sha512 not found, falling back to sha1" ));
889
929
}
890
930
891
931
public void testOfficialShaMissing () throws Exception {
892
932
String url = "https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-" + Version .CURRENT + ".zip" ;
893
933
MessageDigest digest = MessageDigest .getInstance ("SHA-1" );
894
934
UserException e = expectThrows (UserException .class , () ->
895
- assertInstallPluginFromUrl ("analysis-icu" , "analysis-icu" , url , null , ".sha1" , checksum (digest )));
935
+ assertInstallPluginFromUrl ("analysis-icu" , "analysis-icu" , url , null , false , ".sha1" , checksum (digest )));
896
936
assertEquals (ExitCodes .IO_ERROR , e .exitCode );
897
937
assertEquals ("Plugin checksum missing: " + url + ".sha512" , e .getMessage ());
898
938
}
899
939
900
940
public void testMavenShaMissing () throws Exception {
901
941
String url = "https://repo1.maven.org/maven2/mygroup/myplugin/1.0.0/myplugin-1.0.0.zip" ;
902
942
UserException e = expectThrows (UserException .class , () ->
903
- assertInstallPluginFromUrl ("mygroup:myplugin:1.0.0" , "myplugin" , url , null , ".dne" , bytes -> null ));
943
+ assertInstallPluginFromUrl ("mygroup:myplugin:1.0.0" , "myplugin" , url , null , false , ".dne" , bytes -> null ));
904
944
assertEquals (ExitCodes .IO_ERROR , e .exitCode );
905
945
assertEquals ("Plugin checksum missing: " + url + ".sha1" , e .getMessage ());
906
946
}
@@ -909,7 +949,7 @@ public void testInvalidShaFileMissingFilename() throws Exception {
909
949
String url = "https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-" + Version .CURRENT + ".zip" ;
910
950
MessageDigest digest = MessageDigest .getInstance ("SHA-512" );
911
951
UserException e = expectThrows (UserException .class , () ->
912
- assertInstallPluginFromUrl ("analysis-icu" , "analysis-icu" , url , null , ".sha512" , checksum (digest )));
952
+ assertInstallPluginFromUrl ("analysis-icu" , "analysis-icu" , url , null , false , ".sha512" , checksum (digest )));
913
953
assertEquals (ExitCodes .IO_ERROR , e .exitCode );
914
954
assertTrue (e .getMessage (), e .getMessage ().startsWith ("Invalid checksum file" ));
915
955
}
@@ -923,6 +963,7 @@ public void testInvalidShaFileMismatchFilename() throws Exception {
923
963
"analysis-icu" ,
924
964
url ,
925
965
null ,
966
+ false ,
926
967
".sha512" ,
927
968
checksumAndString (digest , " repository-s3-" + Version .CURRENT + ".zip" )));
928
969
assertEquals (ExitCodes .IO_ERROR , e .exitCode );
@@ -938,6 +979,7 @@ public void testInvalidShaFileContainingExtraLine() throws Exception {
938
979
"analysis-icu" ,
939
980
url ,
940
981
null ,
982
+ false ,
941
983
".sha512" ,
942
984
checksumAndString (digest , " analysis-icu-" + Version .CURRENT + ".zip\n foobar" )));
943
985
assertEquals (ExitCodes .IO_ERROR , e .exitCode );
@@ -952,6 +994,7 @@ public void testSha512Mismatch() throws Exception {
952
994
"analysis-icu" ,
953
995
url ,
954
996
null ,
997
+ false ,
955
998
".sha512" ,
956
999
bytes -> "foobar analysis-icu-" + Version .CURRENT + ".zip" ));
957
1000
assertEquals (ExitCodes .IO_ERROR , e .exitCode );
@@ -961,7 +1004,7 @@ public void testSha512Mismatch() throws Exception {
961
1004
public void testSha1Mismatch () throws Exception {
962
1005
String url = "https://repo1.maven.org/maven2/mygroup/myplugin/1.0.0/myplugin-1.0.0.zip" ;
963
1006
UserException e = expectThrows (UserException .class , () ->
964
- assertInstallPluginFromUrl ("mygroup:myplugin:1.0.0" , "myplugin" , url , null , ".sha1" , bytes -> "foobar" ));
1007
+ assertInstallPluginFromUrl ("mygroup:myplugin:1.0.0" , "myplugin" , url , null , false , ".sha1" , bytes -> "foobar" ));
965
1008
assertEquals (ExitCodes .IO_ERROR , e .exitCode );
966
1009
assertTrue (e .getMessage (), e .getMessage ().contains ("SHA-1 mismatch, expected foobar" ));
967
1010
}
0 commit comments