4
0

api_deprecated_test.go 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package api
  2. import (
  3. "context"
  4. "testing"
  5. "connectrpc.com/connect"
  6. "github.com/stretchr/testify/assert"
  7. "github.com/stretchr/testify/require"
  8. apiv1 "github.com/OliveTin/OliveTin/gen/olivetin/api/v1"
  9. config "github.com/OliveTin/OliveTin/internal/config"
  10. "github.com/OliveTin/OliveTin/internal/configissues"
  11. "github.com/OliveTin/OliveTin/internal/executor"
  12. )
  13. func deprecatedAPICallSources(t *testing.T, client interface {
  14. GetDiagnostics(context.Context, *connect.Request[apiv1.GetDiagnosticsRequest]) (*connect.Response[apiv1.GetDiagnosticsResponse], error)
  15. }) map[string]bool {
  16. t.Helper()
  17. res, err := client.GetDiagnostics(context.Background(), connect.NewRequest(&apiv1.GetDiagnosticsRequest{}))
  18. require.NoError(t, err)
  19. sources := map[string]bool{}
  20. for _, issue := range res.Msg.ConfigIssues {
  21. if issue.Code == configissues.CodeDeprecatedAPICall {
  22. assert.Equal(t, configissues.SeverityWarning, issue.Severity)
  23. sources[issue.Source] = true
  24. }
  25. }
  26. return sources
  27. }
  28. func TestDeprecatedStartActionByGetRaisesDiagnosticsWarning(t *testing.T) {
  29. configissues.ClearRuntime()
  30. t.Cleanup(configissues.ClearRuntime)
  31. cfg := config.DefaultConfig()
  32. cfg.Actions = []*config.Action{{Title: "Ping", ID: "ping", Shell: "echo ping"}}
  33. ex := executor.DefaultExecutor(cfg)
  34. ex.RebuildActionMap()
  35. testServer, client := getNewTestServerAndClientWithExecutor(cfg, ex)
  36. defer testServer.Close()
  37. assert.Empty(t, deprecatedAPICallSources(t, client))
  38. //nolint:staticcheck // Deliberately calling the deprecated RPC.
  39. _, err := client.StartActionByGet(context.Background(), connect.NewRequest(&apiv1.StartActionByGetRequest{ActionId: "ping"}))
  40. require.NoError(t, err)
  41. //nolint:staticcheck // Deliberately calling the deprecated RPC.
  42. _, err = client.StartActionByGetAndWait(context.Background(), connect.NewRequest(&apiv1.StartActionByGetAndWaitRequest{ActionId: "ping"}))
  43. require.NoError(t, err)
  44. sources := deprecatedAPICallSources(t, client)
  45. assert.True(t, sources["StartActionByGet"])
  46. assert.True(t, sources["StartActionByGetAndWait"])
  47. // Config reloads and entity changes rebuild the issue list; the warnings must survive.
  48. ex.RebuildActionMap()
  49. sources = deprecatedAPICallSources(t, client)
  50. assert.True(t, sources["StartActionByGet"])
  51. assert.True(t, sources["StartActionByGetAndWait"])
  52. }
  53. func TestStartActionDoesNotRaiseDeprecatedWarning(t *testing.T) {
  54. configissues.ClearRuntime()
  55. t.Cleanup(configissues.ClearRuntime)
  56. cfg := config.DefaultConfig()
  57. cfg.Actions = []*config.Action{{Title: "Ping", ID: "ping", Shell: "echo ping"}}
  58. testServer, client := getNewTestServerAndClient(cfg)
  59. defer testServer.Close()
  60. _, err := client.StartAction(context.Background(), connect.NewRequest(&apiv1.StartActionRequest{BindingId: "ping"}))
  61. require.NoError(t, err)
  62. assert.Empty(t, deprecatedAPICallSources(t, client))
  63. }