func TestPluginRestCalls(t *testing.T) { CompressedUpload = false Convey("REST API functional V1", t, func() { Convey("Load Plugin - POST - /v1/plugins", func() { Convey("a single plugin loads", func() { // This test alone tests gzip. Saves on test time. CompressedUpload = true r := startAPI(getDefaultMockConfig()) port := r.port col := core.CollectorPluginType pub := core.PublisherPluginType Convey("A global plugin config is added for all plugins", func() { cdn := cdata.NewNode() cdn.AddItem("password", ctypes.ConfigValueStr{Value: "p@ssw0rd"}) r := setPluginConfigItem(port, "", "", "", cdn) So(r.Body, ShouldHaveSameTypeAs, &rbody.SetPluginConfigItem{}) r1 := r.Body.(*rbody.SetPluginConfigItem) So(r1.Table()["password"], ShouldResemble, ctypes.ConfigValueStr{Value: "p@ssw0rd"}) r2 := getPluginConfigItem(port, &col, "", "") So(r2.Body, ShouldHaveSameTypeAs, &rbody.PluginConfigItem{}) r3 := r2.Body.(*rbody.PluginConfigItem) So(len(r3.Table()), ShouldEqual, 1) So(r3.Table()["password"], ShouldResemble, ctypes.ConfigValueStr{Value: "p@ssw0rd"}) Convey("A plugin config is added for all publishers", func() { cdn := cdata.NewNode() cdn.AddItem("user", ctypes.ConfigValueStr{Value: "john"}) r := setPluginConfigItem(port, core.PublisherPluginType.String(), "", "", cdn) So(r.Body, ShouldHaveSameTypeAs, &rbody.SetPluginConfigItem{}) r1 := r.Body.(*rbody.SetPluginConfigItem) So(r1.Table()["user"], ShouldResemble, ctypes.ConfigValueStr{Value: "john"}) So(len(r1.Table()), ShouldEqual, 2) Convey("A plugin config is added for all versions of a publisher", func() { cdn := cdata.NewNode() cdn.AddItem("path", ctypes.ConfigValueStr{Value: "/usr/local/influxdb/bin"}) r := setPluginConfigItem(port, "2", "influxdb", "", cdn) So(r.Body, ShouldHaveSameTypeAs, &rbody.SetPluginConfigItem{}) r1 := r.Body.(*rbody.SetPluginConfigItem) So(r1.Table()["path"], ShouldResemble, ctypes.ConfigValueStr{Value: "/usr/local/influxdb/bin"}) So(len(r1.Table()), ShouldEqual, 3) Convey("A plugin config is added for a specific version of a publisher", func() { cdn := cdata.NewNode() cdn.AddItem("rate", ctypes.ConfigValueFloat{Value: .8}) r := setPluginConfigItem(port, core.PublisherPluginType.String(), "influxdb", "1", cdn) So(r.Body, ShouldHaveSameTypeAs, &rbody.SetPluginConfigItem{}) r1 := r.Body.(*rbody.SetPluginConfigItem) So(r1.Table()["rate"], ShouldResemble, ctypes.ConfigValueFloat{Value: .8}) So(len(r1.Table()), ShouldEqual, 4) r2 := getPluginConfigItem(port, &pub, "", "") So(r2.Body, ShouldHaveSameTypeAs, &rbody.PluginConfigItem{}) r3 := r2.Body.(*rbody.PluginConfigItem) So(len(r3.Table()), ShouldEqual, 2) r4 := getPluginConfigItem(port, &pub, "influxdb", "1") So(r4.Body, ShouldHaveSameTypeAs, &rbody.PluginConfigItem{}) r5 := r4.Body.(*rbody.PluginConfigItem) So(len(r5.Table()), ShouldEqual, 4) Convey("A global plugin config field is deleted", func() { r := deletePluginConfigItem(port, "", "", "", []string{"password"}) So(r.Body, ShouldHaveSameTypeAs, &rbody.DeletePluginConfigItem{}) r1 := r.Body.(*rbody.DeletePluginConfigItem) So(len(r1.Table()), ShouldEqual, 0) r2 := setPluginConfigItem(port, core.PublisherPluginType.String(), "influxdb", "", cdn) So(r2.Body, ShouldHaveSameTypeAs, &rbody.SetPluginConfigItem{}) r3 := r2.Body.(*rbody.SetPluginConfigItem) So(len(r3.Table()), ShouldEqual, 3) }) }) }) }) }) }) Convey("Plugin config is set at startup", func() { cfg := getDefaultMockConfig() err := cfgfile.Read("../../examples/configs/snap-config-sample.json", &cfg, MOCK_CONSTRAINTS) So(err, ShouldBeNil) if len(SNAP_AUTODISCOVER_PATH) == 0 { if len(SNAP_PATH) != 0 { SNAP_AUTODISCOVER_PATH = helper.PluginPath() log.Warning(fmt.Sprintf("SNAP_AUTODISCOVER_PATH has been set to plugin build path (%s). This might cause test failures", SNAP_AUTODISCOVER_PATH)) } } else { log.Warning(fmt.Sprintf("SNAP_AUTODISCOVER_PATH is set to %s. This might cause test failures", SNAP_AUTODISCOVER_PATH)) } cfg.Control.AutoDiscoverPath = SNAP_AUTODISCOVER_PATH r := startAPI(cfg) port := r.port col := core.CollectorPluginType Convey("Gets the collector config by name and version", func() { r := getPluginConfigItem(port, &col, "pcm", "1") So(r.Body, ShouldHaveSameTypeAs, &rbody.PluginConfigItem{}) r1 := r.Body.(*rbody.PluginConfigItem) So(r1.Table()["path"], ShouldResemble, ctypes.ConfigValueStr{Value: "/usr/local/pcm/bin"}) So(r1.Table()["user"], ShouldResemble, ctypes.ConfigValueStr{Value: "john"}) So(len(r1.Table()), ShouldEqual, 6) }) Convey("Gets the config for a collector by name", func() { r := getPluginConfigItem(port, &col, "pcm", "") So(r.Body, ShouldHaveSameTypeAs, &rbody.PluginConfigItem{}) r1 := r.Body.(*rbody.PluginConfigItem) So(r1.Table()["path"], ShouldResemble, ctypes.ConfigValueStr{Value: "/usr/local/pcm/bin"}) So(r1.Table()["user"], ShouldResemble, ctypes.ConfigValueStr{Value: "jane"}) So(len(r1.Table()), ShouldEqual, 3) }) Convey("Gets the config for all collectors", func() { r := getPluginConfigItem(port, &col, "", "") So(r.Body, ShouldHaveSameTypeAs, &rbody.PluginConfigItem{}) r1 := r.Body.(*rbody.PluginConfigItem) So(r1.Table()["user"], ShouldResemble, ctypes.ConfigValueStr{Value: "jane"}) So(r1.Table()["password"], ShouldResemble, ctypes.ConfigValueStr{Value: "p@ssw0rd"}) So(len(r1.Table()), ShouldEqual, 2) }) Convey("Gets the config for all plugins", func() { r := getPluginConfigItem(port, nil, "", "") So(r.Body, ShouldHaveSameTypeAs, &rbody.PluginConfigItem{}) r1 := r.Body.(*rbody.PluginConfigItem) So(r1.Table()["password"], ShouldResemble, ctypes.ConfigValueStr{Value: "p@ssw0rd"}) So(len(r1.Table()), ShouldEqual, 1) }) }) }) Convey("Enable task - put - /v1/tasks/:id/enable", func() { Convey("Enable a running task", func(c C) { r := startAPI(getDefaultMockConfig()) port := r.port uploadPlugin(MOCK_PLUGIN_PATH2, port) uploadPlugin(FILE_PLUGIN_PATH, port) r1 := createTask("1.json", "yeti", "1s", true, port) So(r1.Body, ShouldHaveSameTypeAs, new(rbody.AddScheduledTask)) plr1 := r1.Body.(*rbody.AddScheduledTask) id := plr1.ID r2 := startTask(id, port) So(r2.Body, ShouldHaveSameTypeAs, new(rbody.ScheduledTaskStarted)) plr2 := r2.Body.(*rbody.ScheduledTaskStarted) So(plr2.ID, ShouldEqual, id) r4 := enableTask(id, port) So(r4.Body, ShouldHaveSameTypeAs, new(rbody.Error)) plr4 := r4.Body.(*rbody.Error) So(plr4.ErrorMessage, ShouldEqual, "Task must be disabled") }) }) }) }
"github.com/intelsdi-x/snap/mgmt/rest" "github.com/intelsdi-x/snap/plugin/helper" "github.com/intelsdi-x/snap/scheduler" "github.com/intelsdi-x/snap/scheduler/wmap" . "github.com/smartystreets/goconvey/convey" ) var ( // Change to set the REST API logging to debug LOG_LEVEL = log.FatalLevel MOCK_PLUGIN_PATH1 = []string{helper.PluginFilePath("snap-plugin-collector-mock1")} MOCK_PLUGIN_PATH2 = []string{helper.PluginFilePath("snap-plugin-collector-mock2")} ANOTHERMOCK_PLUGIN_PATH = []string{helper.PluginFilePath("snap-plugin-collector-anothermock1")} FILE_PLUGIN_PATH = []string{helper.PluginFilePath("snap-plugin-publisher-mock-file")} DIRECTORY_PATH = []string{helper.PluginPath()} NextPort = 45000 p1 *LoadPluginResult p2 *LoadPluginResult p3 *LoadPluginResult ) func getWMFromSample(sample string) *wmap.WorkflowMap { jsonP, err := ioutil.ReadFile("../wmap_sample/" + sample) if err != nil { log.Fatal(err) } wf, err := wmap.FromJson(jsonP) if err != nil {
"github.com/intelsdi-x/gomit" "github.com/intelsdi-x/snap/control" "github.com/intelsdi-x/snap/core" "github.com/intelsdi-x/snap/core/cdata" "github.com/intelsdi-x/snap/core/scheduler_event" "github.com/intelsdi-x/snap/core/serror" "github.com/intelsdi-x/snap/grpc/controlproxy" "github.com/intelsdi-x/snap/pkg/schedule" "github.com/intelsdi-x/snap/plugin/helper" "github.com/intelsdi-x/snap/scheduler/wmap" . "github.com/smartystreets/goconvey/convey" ) var ( PluginPath = helper.PluginPath() ) func TestDistributedWorkflow(t *testing.T) { Convey("Create a scheduler with 2 controls and load plugins", t, func() { l, _ := net.Listen("tcp", ":0") l.Close() cfg := control.GetDefaultConfig() cfg.ListenPort = l.Addr().(*net.TCPAddr).Port c1 := control.New(cfg) c1.Start() m, _ := net.Listen("tcp", ":0") m.Close() cfg.ListenPort = m.Addr().(*net.TCPAddr).Port port1 := cfg.ListenPort c2 := control.New(cfg)