Home | History | Annotate | Download | only in moblab
      1 package autotest.moblab;
      2 
      3 import autotest.common.ui.TabView;
      4 import autotest.moblab.rpc.MoblabRpcCallbacks;
      5 import autotest.moblab.rpc.MoblabRpcCallbacks.RunSuiteCallback;
      6 import autotest.moblab.rpc.MoblabRpcHelper;
      7 import com.google.gwt.event.dom.client.ChangeEvent;
      8 import com.google.gwt.event.dom.client.ChangeHandler;
      9 import com.google.gwt.event.dom.client.ClickEvent;
     10 import com.google.gwt.event.dom.client.ClickHandler;
     11 import com.google.gwt.user.client.Window;
     12 import com.google.gwt.user.client.ui.Button;
     13 import com.google.gwt.user.client.ui.HasVerticalAlignment;
     14 import com.google.gwt.user.client.ui.HorizontalPanel;
     15 import com.google.gwt.user.client.ui.Label;
     16 import com.google.gwt.user.client.ui.ListBox;
     17 import com.google.gwt.user.client.ui.SimplePanel;
     18 import com.google.gwt.user.client.ui.TextArea;
     19 import com.google.gwt.user.client.ui.VerticalPanel;
     20 import com.google.gwt.user.client.ui.Widget;
     21 import java.util.Arrays;
     22 import java.util.List;
     23 
     24 
     25 /**
     26  * Implement a tab to make a very easy way to run the most common moblab suites.
     27  */
     28 public class SuiteRunnerView extends TabView {
     29 
     30   private VerticalPanel suiteRunnerMainPanel;
     31   private ListBox boardSelector;
     32   private ListBox buildSelector;
     33   private ListBox suiteSelector;
     34   private ListBox rwFirmwareSelector;
     35   private ListBox roFirmwareSelector;
     36   private ListBox poolSelector;
     37   private Button actionButton;
     38   private TextArea suiteArgsTextArea;
     39   private HorizontalPanel thirdOptionalLine;
     40 
     41   private static List<String> suiteNames = Arrays.asList("bvt-cq", "bvt-inline",
     42       "cts", "cts_N", "gts", "hardware_storagequal", "hardware_memoryqual",
     43       "faft_setup", "faft_ec", "faft_bios");
     44 
     45   private static String TEST_LIST_PLACEHOLDER = "arm.CtsAnimationTestCases, x86.CtsDeqpTestCases";
     46 
     47   @Override
     48   public String getElementId() {
     49     return "suite_run";
     50   }
     51 
     52   @Override
     53   public void refresh() {
     54     super.refresh();
     55     boardSelector.clear();
     56     buildSelector.clear();
     57     suiteSelector.clear();
     58     rwFirmwareSelector.clear();
     59     roFirmwareSelector.clear();
     60     poolSelector.clear();
     61     suiteArgsTextArea.setText("");
     62 
     63     buildSelector.addItem("Select the build");
     64     suiteSelector.addItem("Select the suite");
     65     poolSelector.addItem("Select the pool");
     66 
     67     rwFirmwareSelector.addItem("Select the RW Firmware (Faft only) (Optional)");
     68     roFirmwareSelector.addItem("Select the RO Firmware (Faft only) (Optional)");
     69 
     70     for (String suite : suiteNames) {
     71       suiteSelector.addItem(suite);
     72     }
     73 
     74     loadBoards();
     75     loadPools();
     76     addWidget(suiteRunnerMainPanel, "view_suite_run");
     77   };
     78 
     79   @Override
     80   public void initialize() {
     81     super.initialize();
     82 
     83     boardSelector = new ListBox();
     84     buildSelector = new ListBox();
     85     suiteSelector = new ListBox();
     86     rwFirmwareSelector = new ListBox();
     87     roFirmwareSelector = new ListBox();
     88     poolSelector = new ListBox();
     89     suiteArgsTextArea = new TextArea();
     90     suiteArgsTextArea.getElement().setPropertyString("placeholder", TEST_LIST_PLACEHOLDER);
     91 
     92     boardSelector.addChangeHandler(new ChangeHandler() {
     93       @Override
     94       public void onChange(ChangeEvent event) {
     95         boardSelected();
     96       }
     97     });
     98     boardSelector.setStyleName("run_suite_selector");
     99 
    100     buildSelector.setEnabled(false);
    101     buildSelector.addChangeHandler(new ChangeHandler() {
    102       @Override
    103       public void onChange(ChangeEvent event) {
    104          buildSelected();
    105       }
    106     });
    107     buildSelector.setStyleName("run_suite_selector");
    108 
    109     suiteSelector.setEnabled(false);
    110     suiteSelector.addChangeHandler(new ChangeHandler() {
    111       @Override
    112       public void onChange(ChangeEvent event) {
    113         suiteSelected();
    114       }
    115     });
    116     suiteSelector.setStyleName("run_suite_selector");
    117 
    118     rwFirmwareSelector.setEnabled(false);
    119     rwFirmwareSelector.setStyleName("run_suite_selector");
    120     roFirmwareSelector.setEnabled(false);
    121     roFirmwareSelector.setStyleName("run_suite_selector");
    122     poolSelector.setEnabled(false);
    123     poolSelector.setStyleName("run_suite_selector");
    124 
    125     suiteArgsTextArea.setStyleName("run_suite_test_args");
    126 
    127     HorizontalPanel firstLine = createHorizontalLineItem("Select board:", boardSelector);
    128     HorizontalPanel secondLine = createHorizontalLineItem("Select build:", buildSelector);
    129     HorizontalPanel thirdLine = createHorizontalLineItem("Select suite:", suiteSelector);
    130     thirdOptionalLine = createHorizontalLineItem("Only run specified tests (Optional):",
    131                                                  suiteArgsTextArea);
    132     thirdOptionalLine.setVisible(false);
    133     HorizontalPanel fourthLine = createHorizontalLineItem("RW Firmware (Optional):", rwFirmwareSelector);
    134     HorizontalPanel fifthLine = createHorizontalLineItem("RO Firmware (Optional):", roFirmwareSelector);
    135     HorizontalPanel sixthLine = createHorizontalLineItem("Pool (Optional):", poolSelector);
    136 
    137     actionButton = new Button("Run Suite", new ClickHandler() {
    138       public void onClick(ClickEvent event) {
    139         int boardSelection = boardSelector.getSelectedIndex();
    140         int buildSelection = buildSelector.getSelectedIndex();
    141         int suiteSelection = suiteSelector.getSelectedIndex();
    142         int poolSelection = poolSelector.getSelectedIndex();
    143         int rwFirmwareSelection = rwFirmwareSelector.getSelectedIndex();
    144         int roFirmwareSelection = roFirmwareSelector.getSelectedIndex();
    145         if (boardSelection != 0 && buildSelection != 0 && suiteSelection != 0) {
    146           String poolLabel = new String();
    147 	  if (poolSelection != 0) {
    148 	    poolLabel = poolSelector.getItemText(poolSelection);
    149 	  }
    150 	  String rwFirmware = new String();
    151 	  if (rwFirmwareSelection != 0) {
    152 	    rwFirmware = rwFirmwareSelector.getItemText(rwFirmwareSelection);
    153 	  }
    154 	  String roFirmware = new String();
    155 	  if (roFirmwareSelection != 0) {
    156 	    roFirmware = roFirmwareSelector.getItemText(roFirmwareSelection);
    157 	  }
    158           runSuite(boardSelector.getItemText(boardSelection),
    159               buildSelector.getItemText(buildSelection),
    160               suiteSelector.getItemText(suiteSelection),
    161               poolLabel,
    162               rwFirmware,
    163               roFirmware,
    164               suiteArgsTextArea.getText());
    165         } else {
    166           Window.alert("You have to select a valid board, build and suite.");
    167         }
    168       }});
    169 
    170     actionButton.setEnabled(false);
    171     actionButton.setStyleName("run_suite_button");
    172     HorizontalPanel seventhLine = createHorizontalLineItem("", actionButton);
    173 
    174     suiteRunnerMainPanel = new VerticalPanel();
    175 
    176     suiteRunnerMainPanel.add(firstLine);
    177     suiteRunnerMainPanel.add(secondLine);
    178     suiteRunnerMainPanel.add(thirdLine);
    179     suiteRunnerMainPanel.add(thirdOptionalLine);
    180     suiteRunnerMainPanel.add(fourthLine);
    181     suiteRunnerMainPanel.add(fifthLine);
    182     suiteRunnerMainPanel.add(sixthLine);
    183     suiteRunnerMainPanel.add(seventhLine);
    184   }
    185 
    186   private HorizontalPanel createHorizontalLineItem(String label, Widget item) {
    187     HorizontalPanel panel = new HorizontalPanel();
    188     panel.add(contstructLabel(label));
    189     panel.add(item);
    190     return panel;
    191   }
    192 
    193   private Label contstructLabel(String labelName) {
    194     Label label = new Label(labelName);
    195     label.setStyleName("run_suite_label");
    196     return label;
    197   }
    198 
    199   private void suiteSelected() {
    200     int selectedIndex = suiteSelector.getSelectedIndex();
    201     if (selectedIndex != 0) {
    202       actionButton.setEnabled(true);
    203     }
    204     // Account for their being an extra item in the drop down
    205     int listIndex = selectedIndex - 1;
    206     if (listIndex  == suiteNames.indexOf("faft_setup") ||
    207       listIndex == suiteNames.indexOf("faft_bios") ||
    208       listIndex == suiteNames.indexOf("faft_ec")) {
    209       loadFirmwareBuilds(boardSelector.getItemText(boardSelector.getSelectedIndex()));
    210     } else {
    211       rwFirmwareSelector.setEnabled(false);
    212       roFirmwareSelector.setEnabled(false);
    213       rwFirmwareSelector.setSelectedIndex(0);
    214       roFirmwareSelector.setSelectedIndex(0);
    215     }
    216 
    217     if (listIndex  == suiteNames.indexOf("gts") ||
    218       listIndex == suiteNames.indexOf("cts") ||
    219       listIndex == suiteNames.indexOf("cts_N")) {
    220       thirdOptionalLine.setVisible(true);
    221     } else {
    222       suiteArgsTextArea.setText("");
    223       thirdOptionalLine.setVisible(false);
    224     }
    225   }
    226 
    227   private void buildSelected() {
    228     int selectedIndex = buildSelector.getSelectedIndex();
    229     if (selectedIndex != 0) {
    230       suiteSelector.setEnabled(true);
    231     }
    232   }
    233 
    234   private void boardSelected() {
    235     suiteSelector.setEnabled(false);
    236     actionButton.setEnabled(false);
    237     int selectedIndex = boardSelector.getSelectedIndex();
    238     // Ignore if user select the instruction label.
    239     if (selectedIndex != 0) {
    240       loadBuilds(boardSelector.getItemText(boardSelector.getSelectedIndex()));
    241     }
    242   }
    243 
    244   /**
    245    * Call an RPC to get the boards that are connected to the moblab and populate them in the
    246    * dropdown.
    247    */
    248   private void loadBoards() {
    249     boardSelector.setEnabled(false);
    250     boardSelector.clear();
    251     boardSelector.addItem("Select the board");
    252     MoblabRpcHelper.fetchConnectedBoards(new MoblabRpcCallbacks.FetchConnectedBoardsCallback() {
    253       @Override
    254       public void onFetchConnectedBoardsSubmitted(List<String> connectedBoards) {
    255         for (String connectedBoard : connectedBoards) {
    256           boardSelector.addItem(connectedBoard);
    257         }
    258         boardSelector.setEnabled(true);
    259       }
    260     });
    261   }
    262 
    263   /**
    264    * Call an RPC to get the pools that are configured on the devices connected to the moblab.
    265    * and fill in the .
    266    */
    267   private void loadPools() {
    268     poolSelector.setEnabled(false);
    269     poolSelector.clear();
    270     poolSelector.addItem("Select a pool");
    271     MoblabRpcHelper.fetchConnectedPools(new MoblabRpcCallbacks.FetchConnectedPoolsCallback() {
    272       @Override
    273       public void onFetchConnectedPoolsSubmitted(List<String> connectedPools) {
    274         for (String connectedPool : connectedPools) {
    275           poolSelector.addItem(connectedPool);
    276         }
    277         poolSelector.setEnabled(true);
    278       }
    279     });
    280   }
    281 
    282 
    283   /**
    284    * Make a RPC to get the most recent builds available for the specified board and populate them
    285    * in the dropdown.
    286    * @param selectedBoard
    287    */
    288   private void loadBuilds(String selectedBoard) {
    289     buildSelector.setEnabled(false);
    290     buildSelector.clear();
    291     buildSelector.addItem("Select the build");
    292     MoblabRpcHelper.fetchBuildsForBoard(selectedBoard,
    293         new MoblabRpcCallbacks.FetchBuildsForBoardCallback() {
    294       @Override
    295       public void onFetchBuildsForBoardCallbackSubmitted(List<String> boards) {
    296         for (String board : boards) {
    297           buildSelector.addItem(board);
    298         }
    299         buildSelector.setEnabled(true);
    300       }
    301     });
    302   }
    303 
    304 
    305   /**
    306    * Make a RPC to get the most recent firmware available for the specified board and populate them
    307    * in the dropdowns.
    308    * @param selectedBoard
    309    */
    310   private void loadFirmwareBuilds(String selectedBoard) {
    311     rwFirmwareSelector.setEnabled(false);
    312     roFirmwareSelector.setEnabled(false);
    313     rwFirmwareSelector.clear();
    314     roFirmwareSelector.clear();
    315     rwFirmwareSelector.addItem("Select the RW Firmware (Faft only) (Optional)");
    316     roFirmwareSelector.addItem("Select the RO Firmware (Faft only) (Optional)");
    317     MoblabRpcHelper.fetchFirmwareForBoard(selectedBoard,
    318         new MoblabRpcCallbacks.FetchFirmwareForBoardCallback() {
    319       @Override
    320       public void onFetchFirmwareForBoardCallbackSubmitted(List<String> firmwareBuilds) {
    321         for (String firmware : firmwareBuilds) {
    322           rwFirmwareSelector.addItem(firmware);
    323           roFirmwareSelector.addItem(firmware);
    324         }
    325         rwFirmwareSelector.setEnabled(true);
    326         roFirmwareSelector.setEnabled(true);
    327       }
    328     });
    329   }
    330 
    331 
    332   /**
    333    * For the selection option of board, build, suite and pool make a RPC call that will instruct
    334    * AFE to run the suite selected.
    335    * @param board, a string that specified a device connected to the moblab.
    336    * @param build, a string that is a valid build for the specified board available in GCS.
    337    * @param suite, a string that specifies the name of a suite selected to run.
    338    * @param pool, an optional name of a pool to run the suite in.
    339    * @param rwFirmware, an optional firmware to use for some qual tests.
    340    * @param roFirmware, an optional firmware to use for some qual tests.
    341    * @param suiteArgs, optional params to pass to the suite.
    342    */
    343   private void runSuite(String board, String build, String suite, String pool, String rwFirmware,
    344       String roFirmware, String suiteArgs) {
    345     String realPoolLabel = pool;
    346     if (pool != null && !pool.isEmpty()) {
    347       realPoolLabel = pool.trim();
    348     }
    349     MoblabRpcHelper.runSuite(board, build, suite, realPoolLabel, rwFirmware, roFirmware,
    350         suiteArgs, new RunSuiteCallback() {
    351       @Override
    352       public void onRunSuiteComplete() {
    353         Window.Location.assign("/afe");
    354       }
    355     });
    356   };
    357 
    358 }
    359