+func DisconnectTermEvents(t *testing.T) {
+ args := xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTTargetTerminalAdd}
+ require.Nil(t, HTTPCli.Post("/events/unregister", args, nil))
+ args = xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTTargetTerminalStateChange}
+ require.Nil(t, HTTPCli.Post("/events/unregister", args, nil))
+ args = xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTTargetTerminalRemove}
+ require.Nil(t, HTTPCli.Post("/events/unregister", args, nil))
+}
+
+func AddTargets(t *testing.T, nbTargets int, chTarget chan xsapiv1.TargetConfig) []string {
+ listID := make([]string, nbTargets)
+ for i := 0; i < nbTargets; i++ {
+ /*target is local*/
+ target := xsapiv1.TargetConfig{
+ Name: "fakeTarget" + strconv.Itoa(i),
+ Type: xsapiv1.TypeTgtStandard,
+ IP: "127.0.0.1",
+ }
+ /*add target*/
+ require.Nil(t, HTTPCli.Post("/targets", target, &target))
+ Debugf(t, "add target %v", target.Name)
+ targetEvt := <-chTarget //waiting for event targetAdd
+ require.Equal(t, target.ID, targetEvt.ID)
+ listID[i] = target.ID
+ }
+ for i := 0; i < nbTargets; i++ {
+ var target xsapiv1.TargetConfig
+ require.Nil(t, HTTPCli.Get("/targets/"+listID[i], &target))
+ require.Equal(t, target.Status, "Enable")
+ }
+ return listID
+}
+
+func AddTerms(t *testing.T, nbTerms int, listID []string, chTermEvt chan xsapiv1.TerminalConfig, sshDir string, port string) {
+ for j := 0; j < len(listID); j++ {
+ listTermsID := make([]string, nbTerms)
+ for i := 0; i < nbTerms; i++ {
+ term := xsapiv1.TerminalConfig{
+ Name: "terminal" + strconv.Itoa(i),
+ Type: xsapiv1.TypeTermSSH,
+ Options: []string{
+ "-p",
+ port,
+ "-i",
+ sshDir + "/ssh",
+ "-o",
+ "StrictHostKeyChecking=no",
+ },
+ }
+ /*add terminal on target*/
+ require.Nil(t, HTTPCli.Post("/targets/"+listID[j]+"/terminals", term, &term))
+ Debugf(t, "add terminal %v", term.Name)
+ termEvt := <-chTermEvt //waiting for event terminalAdd*/
+ require.Equal(t, term.ID, termEvt.ID)
+ listTermsID[i] = term.ID
+ }
+ require.Equal(t, len(listTermsID), nbTerms)
+ for i := 0; i < nbTerms; i++ {
+ var term xsapiv1.TerminalConfig
+ require.Nil(t, HTTPCli.Get("/targets/"+listID[j]+"/terminals/"+listTermsID[i], &term))
+ require.Equal(t, term.Status, "Close")
+ }
+ }
+}
+
+func PostTerms(t *testing.T, post string, chTermEvt chan xsapiv1.TerminalConfig, chTerm chan xsapiv1.TerminalOutMsg,
+ prompt string) {
+ var status string
+ switch post {
+ case "open":
+ status = "Open"
+ case "close":
+ status = "Closing"
+ }
+ var targets []xsapiv1.TargetConfig
+ require.Nil(t, HTTPCli.Get("/targets", &targets))
+ for i := 0; i < len(targets); i++ {
+ var terms []xsapiv1.TerminalConfig
+ require.Nil(t, HTTPCli.Get("/targets/"+targets[i].ID+"/terminals", &terms))
+ listTermsID := make([]string, len(terms))
+ for j := 0; j < len(terms); j++ {
+ var term xsapiv1.TerminalConfig
+ /*post action on term*/
+ require.Nil(t, HTTPCli.Post("/targets/"+targets[i].ID+"/terminals/"+terms[j].ID+"/"+post, terms[j], &term))
+ Debugf(t, "%v terminal %v", post, term.Name)
+ termEvt := <-chTermEvt //waiting for event terminalStateChange
+ if post == "open" {
+ data := []byte("PS1=" + prompt + " bash -norc\n")
+ require.Nil(t, sCli.Conn.Emit(xsapiv1.TerminalInEvent, data))
+ waitForPrompt(t, chTerm, prompt)
+ }
+ require.Equal(t, term.ID, termEvt.ID)
+ require.Equal(t, term.Status, status)
+ require.Equal(t, termEvt.Status, status)
+ listTermsID[i] = term.ID
+ }
+ time.Sleep(10 * time.Millisecond)
+ for j := 0; j < len(listTermsID); j++ {
+ var term xsapiv1.TerminalConfig
+ require.Nil(t, HTTPCli.Get("/targets/"+targets[i].ID+"/terminals/"+listTermsID[i], &term))
+ require.True(t, strings.EqualFold(term.Status, post))
+ Debugf(t, "check that term status %v is %v", term.Name, post)
+ }
+ }
+}
+
+func RemoveTermsTargets(t *testing.T, chTarget chan xsapiv1.TargetConfig, chTermEvt chan xsapiv1.TerminalConfig) {
+ var targets []xsapiv1.TargetConfig
+ require.Nil(t, HTTPCli.Get("/targets", &targets))
+ for i := 0; i < len(targets); i++ {
+ var terms []xsapiv1.TerminalConfig
+ require.Nil(t, HTTPCli.Get("/targets/"+targets[i].ID+"/terminals", &terms))
+ for j := 0; j < len(terms); j++ {
+ var term xsapiv1.TerminalConfig
+ require.Nil(t, HTTPCli.Delete("/targets/"+targets[i].ID+"/terminals/"+terms[j].ID, &term))
+ termEvt := <-chTermEvt
+ require.Equal(t, term.ID, termEvt.ID)
+ require.NotNil(t, HTTPCli.Delete("/targets/"+targets[i].ID+"/terminals/"+terms[j].ID, &term))
+ Debugf(t, "remove terminal %v", term.Name)
+ }
+ var tgtRes xsapiv1.TargetConfig
+ require.Nil(t, HTTPCli.Delete("/targets/"+targets[i].ID, &tgtRes))
+ targetEvt := <-chTarget //waiting for remove terminal event
+ require.Equal(t, tgtRes.ID, targetEvt.ID)
+ require.Equal(t, targets[i].ID, tgtRes.ID)
+ }
+}