| 
									
										
										
										
											2023-05-30 17:48:52 +08:00
										 |  |  | package repo | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/require" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/plugins/log" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-22 19:47:00 +08:00
										 |  |  | func fakeCompatOpts() CompatOpts { | 
					
						
							|  |  |  | 	return NewCompatOpts("7.0.0", "linux", "amd64") | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-30 17:48:52 +08:00
										 |  |  | func TestSelectSystemCompatibleVersion(t *testing.T) { | 
					
						
							|  |  |  | 	logger := log.NewTestPrettyLogger() | 
					
						
							|  |  |  | 	t.Run("Should return error when requested version does not exist", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2024-08-22 19:47:00 +08:00
										 |  |  | 		_, err := SelectSystemCompatibleVersion( | 
					
						
							|  |  |  | 			log.NewTestPrettyLogger(), | 
					
						
							|  |  |  | 			createPluginVersions(versionArg{version: "version"}), | 
					
						
							|  |  |  | 			"test", "1.1.1", fakeCompatOpts()) | 
					
						
							| 
									
										
										
										
											2023-05-30 17:48:52 +08:00
										 |  |  | 		require.Error(t, err) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("Should return error when no version supports current arch", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2024-08-22 19:47:00 +08:00
										 |  |  | 		_, err := SelectSystemCompatibleVersion( | 
					
						
							|  |  |  | 			logger, | 
					
						
							|  |  |  | 			createPluginVersions(versionArg{version: "version", arch: []string{"non-existent"}}), | 
					
						
							|  |  |  | 			"test", "", fakeCompatOpts()) | 
					
						
							| 
									
										
										
										
											2023-05-30 17:48:52 +08:00
										 |  |  | 		require.Error(t, err) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("Should return error when requested version does not support current arch", func(t *testing.T) { | 
					
						
							|  |  |  | 		_, err := SelectSystemCompatibleVersion(logger, createPluginVersions( | 
					
						
							|  |  |  | 			versionArg{version: "2.0.0"}, | 
					
						
							|  |  |  | 			versionArg{version: "1.1.1", arch: []string{"non-existent"}}, | 
					
						
							| 
									
										
										
										
											2024-08-22 19:47:00 +08:00
										 |  |  | 		), "test", "1.1.1", fakeCompatOpts()) | 
					
						
							| 
									
										
										
										
											2023-05-30 17:48:52 +08:00
										 |  |  | 		require.Error(t, err) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("Should return latest available for arch when no version specified", func(t *testing.T) { | 
					
						
							|  |  |  | 		ver, err := SelectSystemCompatibleVersion(logger, createPluginVersions( | 
					
						
							|  |  |  | 			versionArg{version: "2.0.0", arch: []string{"non-existent"}}, | 
					
						
							|  |  |  | 			versionArg{version: "1.0.0"}, | 
					
						
							| 
									
										
										
										
											2024-08-22 19:47:00 +08:00
										 |  |  | 		), "test", "", fakeCompatOpts()) | 
					
						
							| 
									
										
										
										
											2023-05-30 17:48:52 +08:00
										 |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		require.Equal(t, "1.0.0", ver.Version) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("Should return latest version when no version specified", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2024-08-22 19:47:00 +08:00
										 |  |  | 		ver, err := SelectSystemCompatibleVersion(logger, createPluginVersions( | 
					
						
							|  |  |  | 			versionArg{version: "2.0.0"}, | 
					
						
							|  |  |  | 			versionArg{version: "1.0.0"}), | 
					
						
							|  |  |  | 			"test", "", fakeCompatOpts()) | 
					
						
							| 
									
										
										
										
											2023-05-30 17:48:52 +08:00
										 |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		require.Equal(t, "2.0.0", ver.Version) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("Should return requested version", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2024-08-22 19:47:00 +08:00
										 |  |  | 		ver, err := SelectSystemCompatibleVersion(logger, createPluginVersions( | 
					
						
							|  |  |  | 			versionArg{version: "2.0.0"}, | 
					
						
							|  |  |  | 			versionArg{version: "1.0.0"}), | 
					
						
							|  |  |  | 			"test", "1.0.0", fakeCompatOpts()) | 
					
						
							| 
									
										
										
										
											2023-05-30 17:48:52 +08:00
										 |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		require.Equal(t, "1.0.0", ver.Version) | 
					
						
							|  |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2024-08-22 19:47:00 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("Should return error when requested version is not compatible", func(t *testing.T) { | 
					
						
							|  |  |  | 		isCompatible := false | 
					
						
							|  |  |  | 		_, err := SelectSystemCompatibleVersion(logger, | 
					
						
							|  |  |  | 			createPluginVersions(versionArg{version: "2.0.0", isCompatible: &isCompatible}), | 
					
						
							|  |  |  | 			"test", "2.0.0", fakeCompatOpts(), | 
					
						
							|  |  |  | 		) | 
					
						
							|  |  |  | 		require.ErrorContains(t, err, "not compatible") | 
					
						
							|  |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2023-05-30 17:48:52 +08:00
										 |  |  | } |