1
1
import warnings
2
2
3
3
import grafana_client
4
- from grafana_client .elements .plugin import filter_plugin_by_id
4
+ from grafana_client .elements .plugin import get_plugin_by_id
5
5
from munch import munchify
6
6
from packaging import version
7
7
@@ -576,7 +576,7 @@ def test_plugins_list(docker_grafana, capsys, caplog):
576
576
assert len (data ) >= 28
577
577
578
578
# Proof the output is correct.
579
- plugin = munchify (filter_plugin_by_id (plugin_list = data , plugin_id = "alertlist" ))
579
+ plugin = munchify (get_plugin_by_id (plugin_list = data , plugin_id = "alertlist" ))
580
580
assert plugin .name .title () == "Alert List"
581
581
assert plugin .type == "panel"
582
582
assert plugin .id == "alertlist"
@@ -598,7 +598,7 @@ def test_plugins_status_datasource(grafana_version, docker_grafana, capsys, capl
598
598
599
599
# Before conducting a plugin status test, install a non-internal one.
600
600
grafana = grafana_client .GrafanaApi .from_url (url = docker_grafana , timeout = 15 )
601
- grafana .plugin .install_plugin ("yesoreyeram-infinity-datasource" )
601
+ grafana .plugin .install ("yesoreyeram-infinity-datasource" )
602
602
603
603
# Which subcommand to test?
604
604
set_command ("plugins status" , "--format=yaml" )
@@ -613,7 +613,7 @@ def test_plugins_status_datasource(grafana_version, docker_grafana, capsys, capl
613
613
assert len (data ) >= 28
614
614
615
615
# Proof the output is correct.
616
- plugin = munchify (filter_plugin_by_id (plugin_list = data , plugin_id = "yesoreyeram-infinity-datasource" ))
616
+ plugin = munchify (get_plugin_by_id (plugin_list = data , plugin_id = "yesoreyeram-infinity-datasource" ))
617
617
assert "go_gc_duration_seconds" in plugin .metrics
618
618
619
619
@@ -626,7 +626,7 @@ def test_plugins_status_app(grafana_version, docker_grafana, capsys, caplog):
626
626
627
627
# Before conducting a plugin status test, install a non-internal one.
628
628
grafana = grafana_client .GrafanaApi .from_url (url = docker_grafana , timeout = 15 )
629
- grafana .plugin .install_plugin ("aws-datasource-provisioner-app" )
629
+ grafana .plugin .install ("aws-datasource-provisioner-app" )
630
630
631
631
# Which subcommand to test?
632
632
set_command ("plugins status" , "--format=yaml" )
@@ -641,6 +641,42 @@ def test_plugins_status_app(grafana_version, docker_grafana, capsys, caplog):
641
641
assert len (data ) >= 28
642
642
643
643
# Proof the output is correct.
644
- plugin = munchify (filter_plugin_by_id (plugin_list = data , plugin_id = "aws-datasource-provisioner-app" ))
644
+ plugin = munchify (get_plugin_by_id (plugin_list = data , plugin_id = "aws-datasource-provisioner-app" ))
645
645
assert "process_virtual_memory_max_bytes" in plugin .metrics
646
646
assert plugin .health == {"message" : "" , "status" : "OK" }
647
+
648
+
649
+ def test_plugins_install_uninstall (grafana_version , docker_grafana , capsys , caplog ):
650
+ """
651
+ Verify the plugin status when installing/uninstalling a plugin.
652
+ """
653
+ if version .parse (grafana_version ) < version .parse ("8" ):
654
+ raise pytest .skip (f"Plugin status inquiry only works on Grafana 8 and newer" )
655
+
656
+ plugin_name = "yesoreyeram-infinity-datasource"
657
+
658
+ # Before conducting a plugin status test, install a non-internal one.
659
+ grafana = grafana_client .GrafanaApi .from_url (url = docker_grafana , timeout = 15 )
660
+ grafana .plugin .install (plugin_name )
661
+
662
+ # Which subcommand to test?
663
+ set_command (f"plugins status --id={ plugin_name } " , "--format=yaml" )
664
+
665
+ # Run command and capture YAML output.
666
+ with caplog .at_level (logging .DEBUG ):
667
+ grafana_wtf .commands .run ()
668
+ captured = capsys .readouterr ()
669
+ plugin_status = munchify (yaml .safe_load (captured .out ))
670
+
671
+ # Proof the output is correct.
672
+ assert plugin_status .id == plugin_name
673
+ assert version .parse (plugin_status .version ) >= version .parse ("2.0.0" )
674
+ assert "go_gc_duration_seconds" in plugin_status .metrics
675
+
676
+ # Uninstall the plugin again.
677
+ grafana .plugin .uninstall (plugin_name )
678
+
679
+ # Verify uninstalling worked.
680
+ with pytest .raises (KeyError ) as ex :
681
+ grafana_wtf .commands .run ()
682
+ assert ex .match ("Plugin not found: yesoreyeram-infinity-datasource" )
0 commit comments