mirror of
https://github.com/Telecominfraproject/wlan-testing.git
synced 2025-10-30 02:22:44 +00:00
added testrails as an optional argument, cleaned the directories, added functionality of multiclient
Signed-off-by: shivamcandela <shivam.thakur@candelatech.com>
This commit is contained in:
@@ -1,319 +0,0 @@
|
||||
package automationTests;
|
||||
|
||||
|
||||
/**
|
||||
* TestRail API binding for Java (API v2, available since TestRail 3.0)
|
||||
* Updated for TestRail 5.7
|
||||
*
|
||||
* Learn more:
|
||||
*
|
||||
* http://docs.gurock.com/testrail-api2/start
|
||||
* http://docs.gurock.com/testrail-api2/accessing
|
||||
*
|
||||
* Copyright Gurock Software GmbH. See license.md for details.
|
||||
*/
|
||||
|
||||
import java.net.URL;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.util.Base64;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.JSONValue;
|
||||
|
||||
|
||||
public class APIClient
|
||||
{
|
||||
private String m_user;
|
||||
private String m_password;
|
||||
private String m_url;
|
||||
|
||||
public APIClient(String base_url)
|
||||
{
|
||||
if (!base_url.endsWith("/"))
|
||||
{
|
||||
base_url += "/";
|
||||
}
|
||||
|
||||
this.m_url = base_url + "index.php?/api/v2/";
|
||||
}
|
||||
|
||||
/**
|
||||
* Get/Set User
|
||||
*
|
||||
* Returns/sets the user used for authenticating the API requests.
|
||||
*/
|
||||
public String getUser()
|
||||
{
|
||||
return this.m_user;
|
||||
}
|
||||
|
||||
public void setUser(String user)
|
||||
{
|
||||
this.m_user = user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get/Set Password
|
||||
*
|
||||
* Returns/sets the password used for authenticating the API requests.
|
||||
*/
|
||||
public String getPassword()
|
||||
{
|
||||
return this.m_password;
|
||||
}
|
||||
|
||||
public void setPassword(String password)
|
||||
{
|
||||
this.m_password = password;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send Get
|
||||
*
|
||||
* Issues a GET request (read) against the API and returns the result
|
||||
* (as Object, see below).
|
||||
*
|
||||
* Arguments:
|
||||
*
|
||||
* uri The API method to call including parameters
|
||||
* (e.g. get_case/1)
|
||||
*
|
||||
* Returns the parsed JSON response as standard object which can
|
||||
* either be an instance of JSONObject or JSONArray (depending on the
|
||||
* API method). In most cases, this returns a JSONObject instance which
|
||||
* is basically the same as java.util.Map.
|
||||
*
|
||||
* If 'get_attachment/:attachment_id', returns a String
|
||||
*/
|
||||
public Object sendGet(String uri, String data)
|
||||
throws MalformedURLException, IOException, APIException
|
||||
{
|
||||
return this.sendRequest("GET", uri, data);
|
||||
}
|
||||
|
||||
public Object sendGet(String uri)
|
||||
throws MalformedURLException, IOException, APIException
|
||||
{
|
||||
return this.sendRequest("GET", uri, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send POST
|
||||
*
|
||||
* Issues a POST request (write) against the API and returns the result
|
||||
* (as Object, see below).
|
||||
*
|
||||
* Arguments:
|
||||
*
|
||||
* uri The API method to call including parameters
|
||||
* (e.g. add_case/1)
|
||||
* data The data to submit as part of the request (e.g.,
|
||||
* a map)
|
||||
* If adding an attachment, must be the path
|
||||
* to the file
|
||||
*
|
||||
* Returns the parsed JSON response as standard object which can
|
||||
* either be an instance of JSONObject or JSONArray (depending on the
|
||||
* API method). In most cases, this returns a JSONObject instance which
|
||||
* is basically the same as java.util.Map.
|
||||
*/
|
||||
public Object sendPost(String uri, Object data)
|
||||
throws MalformedURLException, IOException, APIException
|
||||
{
|
||||
return this.sendRequest("POST", uri, data);
|
||||
}
|
||||
|
||||
private Object sendRequest(String method, String uri, Object data)
|
||||
throws MalformedURLException, IOException, APIException
|
||||
{
|
||||
URL url = new URL(this.m_url + uri);
|
||||
// Create the connection object and set the required HTTP method
|
||||
// (GET/POST) and headers (content type and basic auth).
|
||||
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
|
||||
|
||||
String auth = getAuthorization(this.m_user, this.m_password);
|
||||
conn.addRequestProperty("Authorization", "Basic " + auth);
|
||||
|
||||
if (method.equals("POST"))
|
||||
{
|
||||
conn.setRequestMethod("POST");
|
||||
// Add the POST arguments, if any. We just serialize the passed
|
||||
// data object (i.e. a dictionary) and then add it to the
|
||||
// request body.
|
||||
if (data != null)
|
||||
{
|
||||
if (uri.startsWith("add_attachment")) // add_attachment API requests
|
||||
{
|
||||
String boundary = "TestRailAPIAttachmentBoundary"; //Can be any random string
|
||||
File uploadFile = new File((String)data);
|
||||
|
||||
conn.setDoOutput(true);
|
||||
conn.addRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
|
||||
|
||||
OutputStream ostreamBody = conn.getOutputStream();
|
||||
BufferedWriter bodyWriter = new BufferedWriter(new OutputStreamWriter(ostreamBody));
|
||||
|
||||
bodyWriter.write("\n\n--" + boundary + "\r\n");
|
||||
bodyWriter.write("Content-Disposition: form-data; name=\"attachment\"; filename=\""
|
||||
+ uploadFile.getName() + "\"");
|
||||
bodyWriter.write("\r\n\r\n");
|
||||
bodyWriter.flush();
|
||||
|
||||
//Read file into request
|
||||
InputStream istreamFile = new FileInputStream(uploadFile);
|
||||
int bytesRead;
|
||||
byte[] dataBuffer = new byte[1024];
|
||||
while ((bytesRead = istreamFile.read(dataBuffer)) != -1)
|
||||
{
|
||||
ostreamBody.write(dataBuffer, 0, bytesRead);
|
||||
}
|
||||
|
||||
ostreamBody.flush();
|
||||
|
||||
//end of attachment, add boundary
|
||||
bodyWriter.write("\r\n--" + boundary + "--\r\n");
|
||||
bodyWriter.flush();
|
||||
|
||||
//Close streams
|
||||
istreamFile.close();
|
||||
ostreamBody.close();
|
||||
bodyWriter.close();
|
||||
}
|
||||
else // Not an attachment
|
||||
{
|
||||
conn.addRequestProperty("Content-Type", "application/json");
|
||||
byte[] block = JSONValue.toJSONString(data).
|
||||
getBytes("UTF-8");
|
||||
|
||||
conn.setDoOutput(true);
|
||||
OutputStream ostream = conn.getOutputStream();
|
||||
ostream.write(block);
|
||||
ostream.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
else // GET request
|
||||
{
|
||||
conn.addRequestProperty("Content-Type", "application/json");
|
||||
}
|
||||
|
||||
// Execute the actual web request (if it wasn't already initiated
|
||||
// by getOutputStream above) and record any occurred errors (we use
|
||||
// the error stream in this case).
|
||||
int status = conn.getResponseCode();
|
||||
|
||||
InputStream istream;
|
||||
if (status != 200)
|
||||
{
|
||||
istream = conn.getErrorStream();
|
||||
if (istream == null)
|
||||
{
|
||||
throw new APIException(
|
||||
"TestRail API return HTTP " + status +
|
||||
" (No additional error message received)"
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
istream = conn.getInputStream();
|
||||
}
|
||||
|
||||
// If 'get_attachment' (not 'get_attachments') returned valid status code, save the file
|
||||
if ((istream != null)
|
||||
&& (uri.startsWith("get_attachment/")))
|
||||
{
|
||||
FileOutputStream outputStream = new FileOutputStream((String)data);
|
||||
|
||||
int bytesRead = 0;
|
||||
byte[] buffer = new byte[1024];
|
||||
while ((bytesRead = istream.read(buffer)) > 0)
|
||||
{
|
||||
outputStream.write(buffer, 0, bytesRead);
|
||||
}
|
||||
|
||||
outputStream.close();
|
||||
istream.close();
|
||||
return (String) data;
|
||||
}
|
||||
|
||||
// Not an attachment received
|
||||
// Read the response body, if any, and deserialize it from JSON.
|
||||
String text = "";
|
||||
if (istream != null)
|
||||
{
|
||||
BufferedReader reader = new BufferedReader(
|
||||
new InputStreamReader(
|
||||
istream,
|
||||
"UTF-8"
|
||||
)
|
||||
);
|
||||
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null)
|
||||
{
|
||||
text += line;
|
||||
text += System.getProperty("line.separator");
|
||||
}
|
||||
|
||||
reader.close();
|
||||
}
|
||||
|
||||
Object result;
|
||||
if (!text.equals(""))
|
||||
{
|
||||
result = JSONValue.parse(text);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = new JSONObject();
|
||||
}
|
||||
|
||||
// Check for any occurred errors and add additional details to
|
||||
// the exception message, if any (e.g. the error message returned
|
||||
// by TestRail).
|
||||
if (status != 200)
|
||||
{
|
||||
String error = "No additional error message received";
|
||||
if (result != null && result instanceof JSONObject)
|
||||
{
|
||||
JSONObject obj = (JSONObject) result;
|
||||
if (obj.containsKey("error"))
|
||||
{
|
||||
error = '"' + (String) obj.get("error") + '"';
|
||||
}
|
||||
}
|
||||
|
||||
throw new APIException(
|
||||
"TestRail API returned HTTP " + status +
|
||||
"(" + error + ")"
|
||||
);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static String getAuthorization(String user, String password)
|
||||
{
|
||||
try
|
||||
{
|
||||
return new String(Base64.getEncoder().encode((user + ":" + password).getBytes()));
|
||||
}
|
||||
catch (IllegalArgumentException e)
|
||||
{
|
||||
// Not thrown
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
package automationTests;
|
||||
|
||||
/**
|
||||
* TestRail API binding for Java (API v2, available since TestRail 3.0)
|
||||
*
|
||||
* Learn more:
|
||||
*
|
||||
* http://docs.gurock.com/testrail-api2/start
|
||||
* http://docs.gurock.com/testrail-api2/accessing
|
||||
*
|
||||
* Copyright Gurock Software GmbH. See license.md for details.
|
||||
*/
|
||||
|
||||
public class APIException extends Exception
|
||||
{
|
||||
public APIException(String message)
|
||||
{
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
@@ -1,486 +0,0 @@
|
||||
package automationTests;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Calendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Test;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.Assert;
|
||||
import org.junit.BeforeClass;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.Keys;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.chrome.ChromeDriver;
|
||||
import org.openqa.selenium.chrome.ChromeOptions;
|
||||
import org.openqa.selenium.interactions.Actions;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.JSONValue;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class AccountTest{
|
||||
WebDriver driver;
|
||||
static APIClient client;
|
||||
static long runId;
|
||||
@BeforeClass
|
||||
public static void startTest() throws Exception
|
||||
{
|
||||
client = new APIClient("https://telecominfraproject.testrail.com");
|
||||
client.setUser("syama.devi@connectus.ai");
|
||||
client.setPassword("Connectus123$");
|
||||
JSONArray c = (JSONArray) client.sendGet("get_runs/5");
|
||||
runId = new Long(0);
|
||||
|
||||
Calendar cal = Calendar.getInstance();
|
||||
//Months are indexed 0-11 so add 1 for current month
|
||||
int month = cal.get(Calendar.MONTH) + 1;
|
||||
String date = "UI Automation Run - " + cal.get(Calendar.DATE) + "/" + month + "/" + cal.get(Calendar.YEAR);
|
||||
|
||||
for (int a = 0; a < c.size(); a++) {
|
||||
if (((JSONObject) c.get(a)).get("name").equals(date)) {
|
||||
runId = (Long) ((JSONObject) c.get(a)).get("id");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void launchBrowser() {
|
||||
System.setProperty("webdriver.chrome.driver", "/home/netex/nightly_sanity/ui-scripts/chromedriver");
|
||||
ChromeOptions options = new ChromeOptions();
|
||||
options.addArguments("--no-sandbox");
|
||||
// options.addArguments("--disable-dev-shm-usage");
|
||||
options.addArguments("--headless");
|
||||
options.addArguments("--window-size=1920,1080");
|
||||
driver = new ChromeDriver(options);
|
||||
driver.get("https://wlan-ui.qa.lab.wlan.tip.build");
|
||||
}
|
||||
|
||||
void closeBrowser() {
|
||||
driver.close();
|
||||
}
|
||||
|
||||
public void logIn() {
|
||||
driver.findElement(By.id("login_email")).sendKeys("support@example.com");
|
||||
driver.findElement(By.id("login_password")).sendKeys("support");
|
||||
driver.findElement(By.xpath("//*[@id=\"login\"]/button/span")).click();
|
||||
}
|
||||
|
||||
public void accountsScreen() throws Exception {
|
||||
driver.findElement(By.linkText("Accounts")).click();
|
||||
}
|
||||
|
||||
public void addAccountButton(int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
Actions act = new Actions(driver);
|
||||
act.moveToElement(driver.findElement(By.cssSelector("[title^='addaccount']"))).click().perform();
|
||||
} catch (Exception E) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Fail");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void verifyAddAccountPopup(int testId) throws MalformedURLException, IOException, APIException {
|
||||
Map data = new HashMap();
|
||||
try {
|
||||
if (driver.findElement(By.id("rcDialogTitle0")).getText().equals("Add User")) {
|
||||
//pass
|
||||
} else {
|
||||
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Incorrect popup displayed");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail();
|
||||
}
|
||||
} catch (Exception E) {
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Fail");
|
||||
}
|
||||
}
|
||||
|
||||
public void addAccount(String account, String password, String confirmPassword, int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
addAccountButton(testId);
|
||||
Actions browser = new Actions(driver);
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(account).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(password).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(confirmPassword).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.ENTER).perform();
|
||||
} catch (Exception E) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Fail");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void blankEmailWarning(int testId) throws Exception {
|
||||
try {
|
||||
if (driver.findElement(By.cssSelector("[role^='alert']")).getText().equals("Please input your e-mail")) {
|
||||
//pass
|
||||
} else {
|
||||
//System.out.print(driver.findElement(By.cssSelector("[role^='alert']")).getText());
|
||||
|
||||
fail("Incorrect warning displayed");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("No warning displayed");
|
||||
}
|
||||
}
|
||||
|
||||
public void invalidPasswordsWarning(int testId) throws Exception {
|
||||
try {
|
||||
if (driver.findElement(By.cssSelector("[role^='alert']")).getText().equals("The two passwords do not match")) {
|
||||
//pass
|
||||
} else {
|
||||
System.out.print(driver.findElement(By.cssSelector(".ant-form-item-explain > div")).getText());
|
||||
|
||||
fail("Incorrect warning displayed");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("No warning displayed");
|
||||
}
|
||||
}
|
||||
|
||||
public void invalidEmailWarning(int testId) throws Exception {
|
||||
try {
|
||||
if (driver.findElement(By.cssSelector("[role^='alert']")).getText().equals("The input is not a valid e-mail")) {
|
||||
//pass
|
||||
} else {
|
||||
System.out.print(driver.findElement(By.cssSelector(".ant-form-item-explain > div")).getText());
|
||||
|
||||
fail("Incorrect error displayed");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("No error displayed");
|
||||
}
|
||||
}
|
||||
|
||||
public void editAccount(String oldName, String newName, int testId) throws Exception {
|
||||
try {
|
||||
WebElement tbl = driver.findElement(By.xpath("//table"));
|
||||
List<WebElement> rows = tbl.findElements(By.tagName("tr"));
|
||||
boolean found = false;
|
||||
//row iteration
|
||||
breakP:
|
||||
for(int i=0; i<rows.size(); i++) {
|
||||
//check column each in row, identification with 'td' tag
|
||||
List<WebElement> cols = rows.get(i).findElements(By.tagName("td"));
|
||||
|
||||
//column iteration
|
||||
for(int j=0; j<cols.size()-1; j++) {
|
||||
|
||||
if (cols.get(j).getText().equals(oldName) && i!=1) {
|
||||
cols.get(2).click();
|
||||
found = true;
|
||||
break breakP;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Account not found");
|
||||
}
|
||||
Thread.sleep(1000);
|
||||
Actions browser = new Actions(driver);
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(newName).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys("password").perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys("password").perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.ENTER).perform();
|
||||
} catch (Exception E) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Fail");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void deleteAccount(String profile, int testId) throws Exception {
|
||||
try {
|
||||
WebElement tbl = driver.findElement(By.xpath("//table"));
|
||||
List<WebElement> rows = tbl.findElements(By.tagName("tr"));
|
||||
boolean found = false;
|
||||
//row iteration
|
||||
breakP:
|
||||
for(int i=0; i<rows.size(); i++) {
|
||||
//check column each in row, identification with 'td' tag
|
||||
List<WebElement> cols = rows.get(i).findElements(By.tagName("td"));
|
||||
|
||||
//column iteration
|
||||
for(int j=0; j<cols.size()-1; j++) {
|
||||
|
||||
if (cols.get(j).getText().equals(profile) && i!=1) {
|
||||
cols.get(3).click();
|
||||
found = true;
|
||||
break breakP;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Account not found");
|
||||
}
|
||||
Thread.sleep(1000);
|
||||
Actions browser = new Actions(driver);
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.ENTER).perform();
|
||||
} catch (Exception E) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Fail");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//Verifies whether profile exists
|
||||
public void findAccount(boolean expected, String profile, int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
WebElement tbl = driver.findElement(By.xpath("//table"));
|
||||
List<WebElement> rows = tbl.findElements(By.tagName("tr"));
|
||||
boolean found = false;
|
||||
//row iteration
|
||||
for(int i=0; i<rows.size(); i++) {
|
||||
//check column each in row, identification with 'td' tag
|
||||
List<WebElement> cols = rows.get(i).findElements(By.tagName("td"));
|
||||
|
||||
//column iteration
|
||||
for(int j=0; j<cols.size()-1; j++) {
|
||||
if (cols.get(j).getText().equals(profile) && i!=1) {
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (expected != found && expected == true) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Account not found.");
|
||||
} else if (expected != found && expected == false){
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Account unexpectedly found in the list.");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Fail");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//C5116
|
||||
@Test
|
||||
public void addAccountPopupTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
AccountTest obj = new AccountTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.accountsScreen();
|
||||
Thread.sleep(2000);
|
||||
obj.addAccountButton(5116);
|
||||
Thread.sleep(1000);
|
||||
obj.verifyAddAccountPopup(5116);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5116", data);
|
||||
|
||||
}
|
||||
|
||||
//C5113
|
||||
@Test
|
||||
public void addAccountTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
AccountTest obj = new AccountTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.accountsScreen();
|
||||
Thread.sleep(2000);
|
||||
obj.addAccount("automationtest@gmail.com","password","password", 5113);
|
||||
Thread.sleep(3000);
|
||||
obj.findAccount(true, "automationtest@gmail.com", 5113);
|
||||
Thread.sleep(1000);
|
||||
obj.deleteAccount("automationtest@gmail.com", 5113);
|
||||
Thread.sleep(2000);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5113", data);
|
||||
|
||||
}
|
||||
|
||||
//C5120
|
||||
@Test
|
||||
public void editAccountTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
AccountTest obj = new AccountTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.accountsScreen();
|
||||
Thread.sleep(2000);
|
||||
obj.addAccount("automationtest@gmail.com","password","password", 5120);
|
||||
Thread.sleep(3000);
|
||||
obj.editAccount("automationtest@gmail.com", "automationtestEdit@gmail.com", 5120);
|
||||
Thread.sleep(1500);
|
||||
obj.findAccount(true, "automationtestEdit@gmail.com", 5120);
|
||||
obj.deleteAccount("automationtestEdit@gmail.com",5120);
|
||||
Thread.sleep(2000);
|
||||
obj.driver.navigate().refresh();
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5120", data);
|
||||
|
||||
}
|
||||
|
||||
//C5114
|
||||
@Test
|
||||
public void addAccountBlankDetailsTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
AccountTest obj = new AccountTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.accountsScreen();
|
||||
Thread.sleep(2000);
|
||||
obj.addAccount("","password","password", 5114);
|
||||
Thread.sleep(1000);
|
||||
obj.blankEmailWarning(5114);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5114", data);
|
||||
|
||||
}
|
||||
|
||||
//C5117
|
||||
@Test
|
||||
public void addAccountInvalidPasswordTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
AccountTest obj = new AccountTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.accountsScreen();
|
||||
Thread.sleep(2000);
|
||||
obj.addAccount("automationtest@gmail.com","password","password1",5117);
|
||||
Thread.sleep(1000);
|
||||
obj.invalidPasswordsWarning(5117);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5117", data);
|
||||
|
||||
}
|
||||
|
||||
//C5118
|
||||
@Test
|
||||
public void addAccountInvalidEmailTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
AccountTest obj = new AccountTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.accountsScreen();
|
||||
Thread.sleep(2000);
|
||||
obj.addAccount("abcd12234","password","password",5118);
|
||||
Thread.sleep(3000);
|
||||
obj.invalidEmailWarning(5118);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5118", data);
|
||||
|
||||
}
|
||||
//C5121
|
||||
@Test
|
||||
public void deleteAccountTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
AccountTest obj = new AccountTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.accountsScreen();
|
||||
Thread.sleep(2000);
|
||||
obj.addAccount("automationtest@gmail.com","password","password",5121);
|
||||
Thread.sleep(3000);
|
||||
obj.deleteAccount("automationtest@gmail.com",5121);
|
||||
Thread.sleep(4000);
|
||||
obj.driver.navigate().refresh();
|
||||
Thread.sleep(3000);
|
||||
obj.findAccount(false, "automationtest@gmail.com",5121);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5121", data);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,387 +0,0 @@
|
||||
package automationTests;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Calendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.junit.Assert;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.Test;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.chrome.ChromeDriver;
|
||||
import org.openqa.selenium.chrome.ChromeOptions;
|
||||
|
||||
|
||||
public class DashboardTest {
|
||||
WebDriver driver;
|
||||
static APIClient client;
|
||||
static long runId;
|
||||
// static String Url = System.getenv("CLOUD_SDK_URL");
|
||||
// static String trUser = System.getenv("TR_USER");
|
||||
// static String trPwd = System.getenv("TR_PWD");
|
||||
// static String cloudsdkUser = "support@example.com";
|
||||
// static String cloudsdkPwd="support";
|
||||
|
||||
@BeforeClass
|
||||
public static void startTest() throws Exception
|
||||
{
|
||||
client = new APIClient("https://telecominfraproject.testrail.com");
|
||||
client.setUser("syama.devi@connectus.ai");
|
||||
client.setPassword("Connect123$");
|
||||
|
||||
JSONArray c = (JSONArray) client.sendGet("get_runs/5");
|
||||
runId = new Long(0);
|
||||
Calendar cal = Calendar.getInstance();
|
||||
//Months are indexed 0-11 so add 1 for current month
|
||||
int month = cal.get(Calendar.MONTH) + 1;
|
||||
String day = Integer.toString(cal.get(Calendar.DATE));
|
||||
if (day.length()<2) {
|
||||
day = "0"+day;
|
||||
}
|
||||
String date = "UI Automation Run - " + day + "/" + month + "/" + cal.get(Calendar.YEAR);
|
||||
for (int a = 0; a < c.size(); a++) {
|
||||
if (((JSONObject) c.get(a)).get("name").equals(date)) {
|
||||
runId = (Long) ((JSONObject) c.get(a)).get("id");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void launchBrowser() {
|
||||
System.setProperty("webdriver.chrome.driver", "/home/netex/nightly_sanity/ui-scripts/chromedriver");
|
||||
// System.setProperty("webdriver.chrome.driver", "/Users/mohammadrahman/Downloads/chromedriver");
|
||||
ChromeOptions options = new ChromeOptions();
|
||||
options.addArguments("--no-sandbox");
|
||||
options.addArguments("--headless");
|
||||
options.addArguments("--window-size=1920,1080");
|
||||
driver = new ChromeDriver(options);
|
||||
driver.get("https://wlan-ui.qa.lab.wlan.tip.build");
|
||||
}
|
||||
|
||||
void closeBrowser() {
|
||||
driver.close();
|
||||
}
|
||||
|
||||
public void logIn() {
|
||||
driver.findElement(By.id("login_email")).sendKeys("support@example.com");
|
||||
driver.findElement(By.id("login_password")).sendKeys("support");
|
||||
driver.findElement(By.xpath("//*[@id=\"login\"]/button/span")).click();
|
||||
}
|
||||
|
||||
public void failure(int testId) throws MalformedURLException, IOException, APIException {
|
||||
driver.close();
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
|
||||
public void networkScreen() throws Exception {
|
||||
driver.findElement(By.linkText("Network")).click();
|
||||
}
|
||||
|
||||
public void clientDevicesScreen() {
|
||||
driver.findElement(By.linkText("Client Devices")).click();
|
||||
}
|
||||
|
||||
public void loadAllProfiles(int testId) throws Exception {
|
||||
try {
|
||||
while (driver.findElements(By.xpath("//span[contains(.,'Load More')]")).size() != 0) {
|
||||
driver.findElement(By.xpath("//span[contains(.,'Load More')]")).click();
|
||||
Thread.sleep(2500);
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("Number of AP's provisioned cannot be found");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public int verifyAPNumber(int testId) throws MalformedURLException, IOException, APIException {
|
||||
|
||||
try {
|
||||
String displayed = driver.findElement(By.xpath("//*[@id=\"root\"]/section/main/div/div/div[1]/div[1]/div[2]/div[1]/div[2]")).getText();
|
||||
int displ;
|
||||
switch(displayed.length()) {
|
||||
case 3:
|
||||
displ = Integer.parseInt(displayed.substring(displayed.length()-1));
|
||||
return displ;
|
||||
case 4:
|
||||
displ = Integer.parseInt(displayed.substring(displayed.length()-2));
|
||||
return displ;
|
||||
}
|
||||
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("Number of AP's provisioned cannot be found");
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
public int verifyDevicesNumber(int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
String displayed = driver.findElement(By.xpath("//*[@id=\"root\"]/section/main/div/div/div[1]/div[2]/div[2]/div[1]/div[2]")).getText();
|
||||
int displ = Integer.parseInt(displayed.substring(displayed.length()-2));
|
||||
return displ;
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
|
||||
fail("Number of total devices associated cannot be found");
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
public void verifyGraphs(int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
|
||||
}catch (Exception E) {
|
||||
failure(testId);
|
||||
|
||||
fail("Number of total devices associated cannot be found");
|
||||
}
|
||||
List<WebElement> rows = driver.findElements(By.cssSelector("[class^='chart']"));
|
||||
List<WebElement> lines = driver.findElements(By.cssSelector("[class^='highcharts-tracker-line']"));
|
||||
|
||||
if (lines.size()!= 5) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public int countRows(int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
|
||||
}catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
WebElement tbl = driver.findElement(By.xpath("//table"));
|
||||
List<WebElement> rows = tbl.findElements(By.tagName("tr"));
|
||||
return rows.size()-2;
|
||||
}
|
||||
|
||||
public int findProfile(int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
|
||||
}catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
WebElement tbl = driver.findElement(By.xpath("//table"));
|
||||
List<WebElement> rows = tbl.findElements(By.tagName("tr"));
|
||||
int count = 0;
|
||||
|
||||
|
||||
//row iteration
|
||||
for(int i=2; i<rows.size(); i++) {
|
||||
//check column each in row, identification with 'td' tag
|
||||
List<WebElement> cols = rows.get(i).findElements(By.tagName("td"));
|
||||
|
||||
if (!cols.get(7).getText().equals("")) {
|
||||
count++;
|
||||
}
|
||||
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
public void verifyClientDevicesGraphs(int testId) throws MalformedURLException, IOException, APIException, InterruptedException {
|
||||
List<WebElement> points = driver.findElements(By.cssSelector("[class^='highcharts-point']"));
|
||||
points.get(1).click();
|
||||
points.get(2).click();
|
||||
Thread.sleep(1000);
|
||||
List<WebElement> lines = driver.findElements(By.cssSelector("[class^='highcharts-tracker-line']"));
|
||||
if (!lines.get(1).getAttribute("visibility").equals("hidden")||!lines.get(2).getAttribute("visibility").equals("hidden")) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
}
|
||||
|
||||
public void verifyTrafficGraphs(int testId) throws MalformedURLException, IOException, APIException, InterruptedException {
|
||||
List<WebElement> points = driver.findElements(By.cssSelector("[class^='highcharts-point']"));
|
||||
points.get(3).click();
|
||||
points.get(4).click();
|
||||
Thread.sleep(1000);
|
||||
List<WebElement> lines = driver.findElements(By.cssSelector("[class^='highcharts-tracker-line']"));
|
||||
if (!lines.get(3).getAttribute("visibility").equals("hidden")||!lines.get(4).getAttribute("visibility").equals("hidden")) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
}
|
||||
|
||||
public void verifyDashboardScreenDetails(int testId) throws MalformedURLException, IOException, APIException {
|
||||
Map data = new HashMap();
|
||||
try {
|
||||
if (!driver.findElement(By.cssSelector("#root > section > main > div > div > div.index-module__infoWrapper___2MqZn > div:nth-child(1) > div.ant-card-head > div > div")).getText().equals("Access Point")) {
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Dashboard section not displayed");
|
||||
} else if (!driver.findElement(By.cssSelector("#root > section > main > div > div > div.index-module__infoWrapper___2MqZn > div:nth-child(2) > div.ant-card-head > div > div")).getText().equals("Client Devices")) {
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Dashboard section not displayed");
|
||||
} else if (!driver.findElement(By.cssSelector("#root > section > main > div > div > div.index-module__infoWrapper___2MqZn > div:nth-child(3) > div.ant-card-head > div > div")).getText().equals("Usage Information (24 hours)")) {
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Dashboard section not displayed");
|
||||
} else if (!driver.findElement(By.cssSelector("#root > section > main > div > div > div:nth-child(2) > div:nth-child(1) > div > div.ant-card-head > div > div.ant-card-head-title")).getText().equals("Inservice APs (24 hours)")) {
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Dashboard section not displayed");
|
||||
} else if (!driver.findElement(By.cssSelector("#root > section > main > div > div > div:nth-child(2) > div:nth-child(2) > div > div.ant-card-head > div > div.ant-card-head-title")).getText().equals("Client Devices (24 hours)")) {
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Dashboard section not displayed");
|
||||
} else if (!driver.findElement(By.cssSelector("#root > section > main > div > div > div:nth-child(2) > div:nth-child(3) > div > div.ant-card-head > div > div.ant-card-head-title")).getText().equals("Traffic (24 hours)")) {
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Dashboard section not displayed");
|
||||
} else if (!driver.findElement(By.cssSelector("#root > section > main > div > div > div:nth-child(3) > div:nth-child(1) > div > div.ant-card-head > div > div")).getText().equals("AP Vendors")) {
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Dashboard section not displayed");
|
||||
} else if (!driver.findElement(By.cssSelector("#root > section > main > div > div > div:nth-child(3) > div:nth-child(2) > div > div.ant-card-head > div > div")).getText().equals("Client Vendors")) {
|
||||
|
||||
fail("Dashboard section not displayed");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Dashboard section not displayed");
|
||||
}
|
||||
|
||||
}
|
||||
//C5218
|
||||
@Test
|
||||
public void apDetailsTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
DashboardTest obj = new DashboardTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
int displayed = obj.verifyAPNumber(5218);
|
||||
Thread.sleep(1000);
|
||||
obj.networkScreen();
|
||||
Thread.sleep(5000);
|
||||
obj.loadAllProfiles(5218);
|
||||
Thread.sleep(3000);
|
||||
int actual = obj.countRows(5218);
|
||||
Assert.assertEquals(displayed, actual);
|
||||
obj.closeBrowser();
|
||||
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5218", data);
|
||||
}
|
||||
|
||||
//C5221
|
||||
@Test
|
||||
public void displayGraphsTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
DashboardTest obj = new DashboardTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(5000);
|
||||
obj.verifyGraphs(5221);
|
||||
Thread.sleep(2000);
|
||||
obj.closeBrowser();
|
||||
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5221", data);
|
||||
|
||||
}
|
||||
|
||||
//C5220
|
||||
@Test
|
||||
public void displayAllSectionsTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
DashboardTest obj = new DashboardTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(5000);
|
||||
obj.verifyDashboardScreenDetails(5220);
|
||||
obj.closeBrowser();
|
||||
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5220", data);
|
||||
|
||||
}
|
||||
|
||||
//C5634
|
||||
@Test
|
||||
public void clientDevicesGraphsTest() throws Exception {
|
||||
int testId = 5634;
|
||||
Map data = new HashMap();
|
||||
DashboardTest obj = new DashboardTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(5000);
|
||||
obj.verifyClientDevicesGraphs(testId);
|
||||
Thread.sleep(2000);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
|
||||
//C5635
|
||||
@Test
|
||||
public void trafficGraphsTest() throws Exception {
|
||||
int testId = 5635;
|
||||
|
||||
DashboardTest obj = new DashboardTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(5000);
|
||||
obj.verifyTrafficGraphs(testId);
|
||||
Thread.sleep(2000);
|
||||
obj.closeBrowser();
|
||||
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
|
||||
// @Test
|
||||
// void devicesDetailsTest() throws Exception {
|
||||
// DashboardTest obj = new DashboardTest();
|
||||
// obj.launchBrowser();
|
||||
// obj.logIn();
|
||||
// Thread.sleep(3000);
|
||||
// int displayed = obj.verifyDevicesNumber();
|
||||
// Thread.sleep(1000);
|
||||
// obj.networkScreen();
|
||||
// Thread.sleep(5000);
|
||||
// obj.clientDevicesScreen();
|
||||
// Thread.sleep(5000);
|
||||
// obj.loadAllProfiles();
|
||||
// Thread.sleep(1000);
|
||||
// int actual = obj.findProfile();
|
||||
// Assert.assertEquals(displayed, actual);
|
||||
// }
|
||||
}
|
||||
@@ -1,777 +0,0 @@
|
||||
package automationTests;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.Keys;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.chrome.ChromeDriver;
|
||||
import org.openqa.selenium.chrome.ChromeOptions;
|
||||
import org.openqa.selenium.interactions.Actions;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Calendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.junit.Assert;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.runner.JUnitCore;
|
||||
import org.junit.runner.Result;
|
||||
import org.junit.Test;
|
||||
import org.junit.internal.TextListener;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.chrome.ChromeDriver;
|
||||
|
||||
public class LoginTest {
|
||||
|
||||
WebDriver driver, driver2;
|
||||
static APIClient client;
|
||||
static long runId;
|
||||
// static String Url = System.getenv("CLOUD_SDK_URL");
|
||||
// static String trUser = System.getenv("TR_USER");
|
||||
// static String trPwd = System.getenv("TR_PWD");
|
||||
// static String cloudsdkUser = "support@example.com";
|
||||
// static String cloudsdkPwd="support";
|
||||
|
||||
@BeforeClass
|
||||
public static void startTest() throws Exception
|
||||
{
|
||||
client = new APIClient("https://telecominfraproject.testrail.com");
|
||||
client.setUser("syama.devi@connectus.ai");
|
||||
client.setPassword("Connect123$");
|
||||
|
||||
JSONArray c = (JSONArray) client.sendGet("get_runs/5");
|
||||
runId = new Long(0);
|
||||
Calendar cal = Calendar.getInstance();
|
||||
//Months are indexed 0-11 so add 1 for current month
|
||||
int month = cal.get(Calendar.MONTH) + 1;
|
||||
String day = Integer.toString(cal.get(Calendar.DATE));
|
||||
if (day.length()<2) {
|
||||
day = "0"+day;
|
||||
}
|
||||
String date = "UI Automation Run - " + day + "/" + month + "/" + cal.get(Calendar.YEAR);
|
||||
for (int a = 0; a < c.size(); a++) {
|
||||
if (((JSONObject) c.get(a)).get("name").equals(date)) {
|
||||
runId = (Long) ((JSONObject) c.get(a)).get("id");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void launchBrowser() {
|
||||
// System.setProperty("webdriver.chrome.driver", "/Users/mohammadrahman/Downloads/chromedriver");
|
||||
System.setProperty("webdriver.chrome.driver", "/home/netex/nightly_sanity/ui-scripts/chromedriver");
|
||||
ChromeOptions options = new ChromeOptions();
|
||||
options.addArguments("--no-sandbox");
|
||||
options.addArguments("--headless");
|
||||
options.addArguments("--window-size=1920,1080");
|
||||
driver = new ChromeDriver(options);
|
||||
driver.get("https://wlan-ui.qa.lab.wlan.tip.build");
|
||||
|
||||
}
|
||||
|
||||
public void failure(int testId) throws MalformedURLException, IOException, APIException {
|
||||
driver.close();
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
|
||||
public void login(String email, String password) {
|
||||
driver.findElement(By.id("login_email")).sendKeys(email);
|
||||
driver.findElement(By.id("login_password")).sendKeys(password);
|
||||
driver.findElement(By.xpath("//*[@id=\"login\"]/button/span")).click();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void checkHover(String box, int testId) throws Exception {
|
||||
try {
|
||||
String colour, colour2;
|
||||
if (box.equals("confirm")) {
|
||||
colour = driver.findElement(By.cssSelector("#login > button")).getCssValue("background-color");
|
||||
WebElement button = driver.findElement(By.cssSelector("#login > button"));
|
||||
|
||||
Actions mouse = new Actions(driver);
|
||||
mouse.moveToElement(button).perform();
|
||||
Thread.sleep(500);
|
||||
|
||||
colour2 = driver.findElement(By.cssSelector("#login > button")).getCssValue("background-color");
|
||||
|
||||
} else if (box.equals("email")) {
|
||||
colour = driver.findElement(By.cssSelector("#login_email")).getCssValue("border-color");
|
||||
WebElement button = driver.findElement(By.cssSelector("#login_email"));
|
||||
|
||||
Actions mouse = new Actions(driver);
|
||||
mouse.moveToElement(button).perform();
|
||||
Thread.sleep(500);
|
||||
|
||||
colour2 = driver.findElement(By.cssSelector("#login_email")).getCssValue("border-color");
|
||||
|
||||
} else {
|
||||
colour = driver.findElement(By.cssSelector("#login_password")).getCssValue("background-color");
|
||||
WebElement button = driver.findElement(By.cssSelector("#login_password"));
|
||||
|
||||
Actions mouse = new Actions(driver);
|
||||
mouse.moveToElement(button).perform();
|
||||
Thread.sleep(500);
|
||||
|
||||
colour2 = driver.findElement(By.cssSelector("#login_password")).getCssValue("background-color");
|
||||
}
|
||||
if (colour.equals(colour2)) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("failure");
|
||||
//Assert.assertNotEquals("Colours did not change when in focus", colour, colour2);
|
||||
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void checkEmailFocus(int testId) throws Exception {
|
||||
try {
|
||||
WebElement email= driver.findElement(By.id("login_email"));
|
||||
boolean emailFocus = email.equals(driver.switchTo().activeElement());
|
||||
if (!emailFocus) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
Assert.assertEquals("Email field is not in focus", true, emailFocus);
|
||||
} catch (Exception E){
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void checkTab(int testId) throws Exception {
|
||||
try {
|
||||
Actions browse = new Actions(driver);
|
||||
browse.sendKeys(Keys.TAB).perform();
|
||||
Thread.sleep(1000);
|
||||
WebElement email= driver.findElement(By.id("login_email"));
|
||||
// System.out.print(driver.switchTo().activeElement());
|
||||
boolean emailFocus = email.equals(driver.switchTo().activeElement());
|
||||
|
||||
if (!emailFocus) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
|
||||
Assert.assertEquals("Email field is not in focus",true, emailFocus);
|
||||
|
||||
browse.sendKeys(Keys.TAB).perform();
|
||||
Thread.sleep(1000);
|
||||
WebElement password= driver.findElement(By.id("login_password"));
|
||||
boolean passwordFocus = password.equals(driver.switchTo().activeElement());
|
||||
|
||||
if (!passwordFocus) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
Assert.assertEquals("Password field is not in focus",true, passwordFocus);
|
||||
|
||||
browse.sendKeys(Keys.TAB).perform();
|
||||
Thread.sleep(1000);
|
||||
WebElement confirm= driver.findElement(By.cssSelector("#login > button"));
|
||||
boolean confirmFocus = confirm.equals(driver.switchTo().activeElement());
|
||||
|
||||
if (!confirmFocus) {
|
||||
|
||||
}
|
||||
Assert.assertEquals("Login button is not in focus", true, confirmFocus);
|
||||
}catch (Exception E){
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void coverPassword(String password, int testId) throws Exception {
|
||||
try {
|
||||
driver.findElement(By.id("login_password")).sendKeys(password);
|
||||
|
||||
WebElement passwordCovered = driver.findElement(By.id("login_password"));
|
||||
boolean passwordTest = (passwordCovered.getAttribute("type").equals("password"));
|
||||
if (!passwordTest) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
Assert.assertEquals("Password is uncovered", true, passwordTest);
|
||||
Thread.sleep(1500);
|
||||
|
||||
driver.findElement(By.cssSelector("#login > div.ant-row.ant-form-item.ant-form-item-has-success > div.ant-col.ant-col-15.ant-form-item-control > div > div > span > span > span > svg")).click();;
|
||||
Thread.sleep(1500);
|
||||
|
||||
WebElement passwordUncovered = driver.findElement(By.id("login_password"));
|
||||
boolean passwordTest2 = (passwordCovered.getAttribute("type").equals("text"));
|
||||
if (!passwordTest2) {
|
||||
|
||||
}
|
||||
Assert.assertEquals("Password is still hidden", true, passwordTest2);
|
||||
} catch (Exception E){
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void copyPassword(String password, int testId) throws Exception {
|
||||
try {
|
||||
driver.findElement(By.id("login_password")).sendKeys(password);
|
||||
|
||||
WebElement passwordCovered = driver.findElement(By.id("login_password"));
|
||||
|
||||
WebElement locOfOrder = driver.findElement(By.id("login_password"));
|
||||
Actions act = new Actions(driver);
|
||||
act.moveToElement(locOfOrder).doubleClick().build().perform();
|
||||
|
||||
driver.findElement(By.id("login_password")).sendKeys(Keys.chord(Keys.CONTROL,"c"));
|
||||
// now apply the command to paste
|
||||
driver.findElement (By.id("login_email")).sendKeys(Keys.chord(Keys.CONTROL, "v"));
|
||||
|
||||
//Assert.assertEquals(expected, actual);
|
||||
} catch (Exception E){
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void logout(int testId) throws Exception {
|
||||
driver.findElement(By.cssSelector(".anticon-setting > svg")).click();
|
||||
Thread.sleep(2500);
|
||||
driver.findElement(By.linkText("Log Out")).click();
|
||||
|
||||
}
|
||||
public void loginEnter(String email, String password, int testId) {
|
||||
driver.findElement(By.id("login_email")).sendKeys(email);
|
||||
driver.findElement(By.id("login_password")).sendKeys(password);
|
||||
driver.findElement(By.id("login_password")).sendKeys(Keys.ENTER);
|
||||
//driver.sendKeys(Keys.RETURN);
|
||||
}
|
||||
public void backButton() {
|
||||
driver.navigate().back();
|
||||
}
|
||||
|
||||
public void loginBlank(int testId) {
|
||||
driver.findElement(By.xpath("//*[@id=\"login\"]/button/span")).click();
|
||||
}
|
||||
|
||||
public void errorNotification(int testId) throws Exception {
|
||||
try {
|
||||
boolean found = false;
|
||||
if (driver.findElement(By.cssSelector(".ant-notification-notice-description")).getText().equals("Invalid e-mail or password.")) {
|
||||
found = true;
|
||||
}
|
||||
if (!found) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
Assert.assertEquals("No error message displayed", true, found);
|
||||
} catch (Exception E){
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void emailField(int testId) throws Exception {
|
||||
try {
|
||||
if (!driver.findElement(By.id("login_email")).isDisplayed()) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
Assert.assertEquals("Email field not found", true, driver.findElement(By.id("login_email")).isDisplayed());
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void passwordField(int testId) throws Exception {
|
||||
try {
|
||||
if (!driver.findElement(By.id("login_password")).isDisplayed()) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Password field not found");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
Assert.assertEquals("Password field not found", true, driver.findElement(By.id("login_password")).isDisplayed());
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void verifyLoginPass(int testId) throws Exception {
|
||||
try {
|
||||
String URL = driver.getCurrentUrl();
|
||||
if (!URL.equals("https://wlan-ui.qa.lab.wlan.tip.build/dashboard")) {
|
||||
|
||||
}
|
||||
Assert.assertEquals("Incorrect URL", URL, "https://wlan-ui.qa.lab.wlan.tip.build/dashboard");
|
||||
}catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void verifyLoginFail(int testId) throws Exception {
|
||||
try {
|
||||
String URL = driver.getCurrentUrl();
|
||||
if (!URL.equals("https://wlan-ui.qa.lab.wlan.tip.build/login")) {
|
||||
|
||||
}
|
||||
Assert.assertEquals("Incorrect URL", URL, "https://wlan-ui.qa.lab.wlan.tip.build/login");
|
||||
}catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void closeBrowser() {
|
||||
driver.close();
|
||||
}
|
||||
|
||||
|
||||
//C4099, C4164, C4172
|
||||
@Test
|
||||
public void loginTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.login("support@example.com", "support");
|
||||
Thread.sleep(3000);
|
||||
obj.verifyLoginPass(4099);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4099", data);
|
||||
JSONObject t = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4164", data);
|
||||
JSONObject s = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4172", data);
|
||||
|
||||
}
|
||||
|
||||
//C4097
|
||||
@Test
|
||||
public void verifyEmailFieldTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.emailField(4097);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4097", data);
|
||||
|
||||
}
|
||||
|
||||
//C4098
|
||||
@Test
|
||||
public void verifyPasswordFieldTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.passwordField(4098);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4098", data);
|
||||
|
||||
}
|
||||
|
||||
//C4157
|
||||
@Test
|
||||
public void loginTestUppercase() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.login("SUPPORT@EXAMPLE.COM", "support");
|
||||
Thread.sleep(3000);
|
||||
obj.verifyLoginPass(4157);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4157", data);
|
||||
|
||||
}
|
||||
|
||||
//C4166
|
||||
@Test
|
||||
public void loginTestPasswordFail() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.login("support@example.com", "support1");
|
||||
Thread.sleep(3000);
|
||||
obj.verifyLoginFail(4166);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4166", data);
|
||||
|
||||
}
|
||||
|
||||
//C4167
|
||||
@Test
|
||||
public void loginTestEmailFail() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.login("support1@example.com", "support");
|
||||
Thread.sleep(3000);
|
||||
obj.verifyLoginFail(4167);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4167", data);
|
||||
|
||||
}
|
||||
|
||||
//C4165
|
||||
@Test
|
||||
public void loginTestEmailPasswordFail() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.login("support1@example.com", "support1");
|
||||
Thread.sleep(3000);
|
||||
obj.verifyLoginFail(4165);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4165", data);
|
||||
|
||||
}
|
||||
//C4168
|
||||
@Test
|
||||
public void loginTestBlankFail() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.loginBlank(4168);
|
||||
Thread.sleep(3000);
|
||||
obj.verifyLoginFail(4168);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4168", data);
|
||||
|
||||
}
|
||||
//C4163
|
||||
@Test
|
||||
public void loginEnterKeyTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.loginEnter("support@example.com", "support", 4163);
|
||||
Thread.sleep(3000);
|
||||
obj.verifyLoginPass(4163);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4163", data);
|
||||
|
||||
}
|
||||
//C4169
|
||||
@Test
|
||||
public void loginBackButtonTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.login("support@example.com", "support");
|
||||
Thread.sleep(3000);
|
||||
obj.verifyLoginPass(4169);
|
||||
obj.backButton();
|
||||
Thread.sleep(3000);
|
||||
obj.verifyLoginPass(4169);
|
||||
Thread.sleep(1500);
|
||||
obj.closeBrowser();
|
||||
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4169", data);
|
||||
|
||||
}
|
||||
//C4171
|
||||
@Test
|
||||
public void logoutTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.login("support@example.com", "support");
|
||||
Thread.sleep(3000);
|
||||
obj.verifyLoginPass(4171);
|
||||
obj.logout(4171);
|
||||
Thread.sleep(3000);
|
||||
obj.verifyLoginFail(4171);
|
||||
obj.closeBrowser();
|
||||
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4171", data);
|
||||
|
||||
}
|
||||
|
||||
//C4160
|
||||
@Test
|
||||
public void logoutBackButtonTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.login("support@example.com", "support");
|
||||
Thread.sleep(3000);
|
||||
obj.verifyLoginPass(4160);
|
||||
obj.logout(4160);
|
||||
Thread.sleep(3000);
|
||||
obj.backButton();
|
||||
Thread.sleep(2000);
|
||||
obj.verifyLoginFail(4160);
|
||||
obj.closeBrowser();
|
||||
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4160", data);
|
||||
}
|
||||
|
||||
///C4103
|
||||
@Test
|
||||
public void showPasswordTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.coverPassword("support", 4103);
|
||||
Thread.sleep(3000);
|
||||
obj.closeBrowser();
|
||||
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4103", data);
|
||||
}
|
||||
|
||||
//C4105
|
||||
@Test
|
||||
public void errorNotificationTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.login("support@example.com", "support1");
|
||||
Thread.sleep(2000);
|
||||
obj.errorNotification(4105);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4105", data);
|
||||
}
|
||||
//C4162
|
||||
@Test
|
||||
public void tabFunctionalityTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(3000);
|
||||
obj.checkTab(4162);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4162", data);
|
||||
}
|
||||
//C4100
|
||||
@Test
|
||||
public void hoverLoginButtonTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(3000);
|
||||
obj.checkHover("confirm", 4100);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4100", data);
|
||||
}
|
||||
//C4101
|
||||
@Test
|
||||
public void hoverEmailFieldTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(3000);
|
||||
obj.checkHover("email", 4101);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4101", data);
|
||||
}
|
||||
//C4102
|
||||
@Test
|
||||
public void hoverPwdFieldTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(3000);
|
||||
obj.checkHover("password", 4102);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4102", data);
|
||||
}
|
||||
// @Test
|
||||
// public void stayLoggedInTest() throws Exception {
|
||||
// Map data = new HashMap();
|
||||
// LoginTest obj = new LoginTest();
|
||||
// obj.launchBrowser();
|
||||
// Thread.sleep(2000);
|
||||
// obj.login("support@example.com", "support");
|
||||
// Thread.sleep(3000);
|
||||
// obj.verifyLoginPass();
|
||||
// Thread.sleep(1000);
|
||||
// obj.closeBrowser();
|
||||
// Thread.sleep(2000);
|
||||
// obj.launchPortal();
|
||||
// Thread.sleep(2500);
|
||||
// obj.launchSecondWindow();
|
||||
// obj.closeBrowser();
|
||||
// data.put("status_id", new Integer(1));
|
||||
// data.put("comment", "This test worked fine!");
|
||||
// JSONObject r = (JSONObject) client.sendPost("add_result_for_case/812/5036", data);
|
||||
// }
|
||||
// @Test
|
||||
// public void newBrowserTest() throws Exception {
|
||||
// Map data = new HashMap();
|
||||
// LoginTest obj = new LoginTest();
|
||||
// obj.launchBrowser();
|
||||
// Thread.sleep(2000);
|
||||
// obj.login("support@example.com", "support");
|
||||
// Thread.sleep(3000);
|
||||
// obj.verifyLoginPass();
|
||||
// Thread.sleep(1000);
|
||||
// obj.launchPortal();
|
||||
// obj.verifyLoginPass();
|
||||
// obj.closeBrowser();
|
||||
// data.put("status_id", new Integer(1));
|
||||
// data.put("comment", "This test worked fine!");
|
||||
// JSONObject r = (JSONObject) client.sendPost("add_result_for_case/812/5036", data);
|
||||
// }
|
||||
|
||||
//C4159
|
||||
@Test
|
||||
public void copyPasswordTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.copyPassword("support", 4159);
|
||||
Thread.sleep(3000);
|
||||
obj.closeBrowser();
|
||||
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4159", data);
|
||||
}
|
||||
//C4161
|
||||
@Test
|
||||
public void initialFocusTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
LoginTest obj = new LoginTest();
|
||||
obj.launchBrowser();
|
||||
Thread.sleep(2000);
|
||||
obj.checkEmailFocus(4161);
|
||||
Thread.sleep(3000);
|
||||
obj.closeBrowser();
|
||||
|
||||
System.out.print("passed");
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4161", data);
|
||||
}
|
||||
}
|
||||
@@ -1,952 +0,0 @@
|
||||
package automationTests;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.fail;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Calendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.junit.Assert;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.Keys;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.chrome.ChromeDriver;
|
||||
import org.openqa.selenium.chrome.ChromeOptions;
|
||||
import org.openqa.selenium.interactions.Actions;
|
||||
|
||||
|
||||
public class NetworkTest {
|
||||
WebDriver driver;
|
||||
static APIClient client;
|
||||
static long runId;
|
||||
// static String Url = System.getenv("CLOUD_SDK_URL");
|
||||
// static String trUser = System.getenv("TR_USER");
|
||||
// static String trPwd = System.getenv("TR_PWD");
|
||||
// static String cloudsdkUser = "support@example.com";
|
||||
// static String cloudsdkPwd="support";
|
||||
|
||||
@BeforeClass
|
||||
public static void startTest() throws Exception
|
||||
{
|
||||
client = new APIClient("https://telecominfraproject.testrail.com");
|
||||
client.setUser("syama.devi@connectus.ai");
|
||||
client.setPassword("Connect123$");
|
||||
|
||||
JSONArray c = (JSONArray) client.sendGet("get_runs/5");
|
||||
runId = new Long(0);
|
||||
Calendar cal = Calendar.getInstance();
|
||||
//Months are indexed 0-11 so add 1 for current month
|
||||
int month = cal.get(Calendar.MONTH) + 1;
|
||||
String day = Integer.toString(cal.get(Calendar.DATE));
|
||||
if (day.length()<2) {
|
||||
day = "0"+day;
|
||||
}
|
||||
String date = "UI Automation Run - " + day + "/" + month + "/" + cal.get(Calendar.YEAR);
|
||||
for (int a = 0; a < c.size(); a++) {
|
||||
if (((JSONObject) c.get(a)).get("name").equals(date)) {
|
||||
runId = (Long) ((JSONObject) c.get(a)).get("id");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void launchBrowser() {
|
||||
// System.setProperty("webdriver.chrome.driver", "/Users/mohammadrahman/Downloads/chromedriver");
|
||||
System.setProperty("webdriver.chrome.driver", "/home/netex/nightly_sanity/ui-scripts/chromedriver");
|
||||
ChromeOptions options = new ChromeOptions();
|
||||
options.addArguments("--no-sandbox");
|
||||
options.addArguments("--headless");
|
||||
options.addArguments("--window-size=1920,1080");
|
||||
driver = new ChromeDriver(options);
|
||||
driver.get("https://wlan-ui.qa.lab.wlan.tip.build");
|
||||
}
|
||||
|
||||
public void failure(int testId) throws MalformedURLException, IOException, APIException {
|
||||
driver.close();
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
|
||||
void closeBrowser() {
|
||||
driver.close();
|
||||
}
|
||||
|
||||
//Log into the CloudSDK portal
|
||||
public void logIn() {
|
||||
driver.findElement(By.id("login_email")).sendKeys("support@example.com");
|
||||
driver.findElement(By.id("login_password")).sendKeys("support");
|
||||
driver.findElement(By.xpath("//*[@id=\"login\"]/button/span")).click();
|
||||
}
|
||||
|
||||
public void networkScreen(int testId) throws Exception {
|
||||
try {
|
||||
driver.findElement(By.linkText("Network")).click();
|
||||
}catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("Fail");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void loadAllProfiles(int testId) throws Exception {
|
||||
try {
|
||||
while (driver.findElements(By.xpath("//*[@id=\"root\"]/section/main/div/div/div[3]/button/span")).size() != 0) {
|
||||
driver.findElement(By.xpath("/html/body/div/section/main/div/div/div[3]/button/span")).click();
|
||||
Thread.sleep(2000);
|
||||
}
|
||||
}catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("Fail");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void addLocation(String loc, int testId) throws Exception {
|
||||
try {
|
||||
driver.findElement(By.cssSelector(".ant-tree-node-content-wrapper:nth-child(3) > .ant-tree-title > span")).click();
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
|
||||
fail("Locations not found");
|
||||
}
|
||||
|
||||
Thread.sleep(1000);
|
||||
|
||||
try {
|
||||
driver.findElement(By.xpath("//span[contains(.,'Add Location')]")).click();
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
|
||||
fail("Add location button not found");
|
||||
}
|
||||
Thread.sleep(1000);
|
||||
Actions browser = new Actions(driver);
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(loc).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.ENTER).perform();
|
||||
Thread.sleep(2000);
|
||||
|
||||
if (!driver.findElement(By.cssSelector(".ant-tree-treenode-switcher-close .ant-tree-title > span")).getText().equals(loc)) {
|
||||
failure(testId);
|
||||
fail("Fail");
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteLocation(String loc, int testId) throws Exception {
|
||||
driver.findElement(By.cssSelector(".ant-tree-treenode-switcher-close .ant-tree-title > span")).click();
|
||||
Thread.sleep(1000);
|
||||
driver.findElement(By.xpath("//span[contains(.,'Delete Location')]")).click();
|
||||
Thread.sleep(2000);
|
||||
if (!driver.findElement(By.cssSelector(".ant-modal-body > p > i")).getText().equals(loc)) {
|
||||
failure(testId);
|
||||
fail("Location not deleted");
|
||||
}
|
||||
Actions browser = new Actions(driver);
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.ENTER).perform();
|
||||
Thread.sleep(2000);
|
||||
}
|
||||
|
||||
//Verifies no field is blank in the column
|
||||
public void verifyNetworkFields(boolean expected, String profile, int column, int testId) throws MalformedURLException, IOException, APIException {
|
||||
WebElement tbl = driver.findElement(By.xpath("//table"));
|
||||
List<WebElement> rows = tbl.findElements(By.tagName("tr"));
|
||||
|
||||
//row iteration
|
||||
for(int i=2; i<rows.size(); i++) {
|
||||
//check column each in row, identification with 'td' tag
|
||||
List<WebElement> cols = rows.get(i).findElements(By.tagName("td"));
|
||||
System.out.print(cols.get(column).getText());
|
||||
if (cols.get(column).getText().equals(profile) && !expected) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Fail");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Verifies whether profile exists and clicks
|
||||
public void findNetwork(String profile, int testId) throws MalformedURLException, IOException, APIException {
|
||||
WebElement tbl = driver.findElement(By.xpath("//table"));
|
||||
List<WebElement> rows = tbl.findElements(By.tagName("tr"));
|
||||
boolean found = false;
|
||||
|
||||
breakP:
|
||||
//row iteration
|
||||
for(int i=0; i<rows.size(); i++) {
|
||||
//check column each in row, identification with 'td' tag
|
||||
List<WebElement> cols = rows.get(i).findElements(By.tagName("td"));
|
||||
|
||||
//column iteration
|
||||
for(int j=0; j<cols.size(); j++) {
|
||||
if (cols.get(j).getText().equals(profile)) {
|
||||
cols.get(j).click();
|
||||
found = true;
|
||||
break breakP;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
failure(testId);
|
||||
fail("Network not found");
|
||||
}
|
||||
//Assert.assertEquals(false, found);
|
||||
}
|
||||
|
||||
public void verifyDevice(String profile, int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
if (driver.findElement(By.cssSelector(".index-module__DeviceDetailCard___2CFDA.ant-card-bordered > div > div > div.index-module__leftWrapContent___2iZZo > p:nth-child(1)")).getText().equals(profile)) {
|
||||
//Pass
|
||||
}
|
||||
else {
|
||||
//System.out.print(driver.findElement(By.cssSelector(".index-module__DeviceDetailCard___2CFDA.ant-card-bordered > div > div > div.index-module__leftWrapContent___2iZZo > p:nth-child(1)")).getText());
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Wrong profile");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("Profile title not found");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void verifyAP(String profile, int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
if (driver.findElement(By.cssSelector("#root > section > main > div > div > div.index-module__mainContent___1X1X6 > div > div.ant-card.ant-card-bordered.ant-card-contain-tabs > div.ant-card-head > div.ant-card-head-wrapper > div.ant-card-head-title > div > div > div:nth-child(1)")).getText().equals(profile)) {
|
||||
//Correct profile
|
||||
}
|
||||
else {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Fail");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("Profile title not found");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void verifyAPLocation(int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
String location = driver.findElement(By.cssSelector(".ant-breadcrumb-link")).getText();
|
||||
|
||||
driver.findElement(By.cssSelector("[id^='rc-tabs-0-tab-location']")).click();
|
||||
Thread.sleep(2000);
|
||||
String dropdownVerification = "[title^='"+location+"']";
|
||||
if (driver.findElements(By.cssSelector(dropdownVerification)).size()==0) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Wrong location");
|
||||
}
|
||||
|
||||
} catch (Exception E) {
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
fail("Profile title not found");
|
||||
}
|
||||
}
|
||||
|
||||
public void refreshButton(int testId) throws Exception {
|
||||
try {
|
||||
driver.findElement(By.cssSelector("[title^='reload']")).click();
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail ("Reload button not visible");
|
||||
}
|
||||
|
||||
Thread.sleep(1000);
|
||||
}
|
||||
|
||||
|
||||
public void clientBlockedListButton(int testId) throws Exception {
|
||||
driver.findElement(By.xpath("//span[contains(.,'Blocked List')]")).click();
|
||||
Thread.sleep(2000);
|
||||
String URL = driver.getCurrentUrl();
|
||||
|
||||
if (!URL.equals("https://wlan-ui.qa.lab.wlan.tip.build/system/blockedlist")) {
|
||||
failure(testId);
|
||||
|
||||
fail ();
|
||||
}
|
||||
//Assert.assertEquals(URL, "https://portal.dev1.netexperience.com/configure/system/blockedlist");
|
||||
|
||||
}
|
||||
|
||||
public void refreshNotificationAP(int testId) throws MalformedURLException, IOException, APIException {
|
||||
|
||||
if (driver.findElement(By.cssSelector(".ant-notification-notice-description")).getText().equals("Access points reloaded.")) {
|
||||
|
||||
} else {
|
||||
failure(testId);
|
||||
fail("Notification did not appear");
|
||||
}
|
||||
}
|
||||
public void refreshNotificationClientDevice(int testId) throws MalformedURLException, IOException, APIException {
|
||||
if (driver.findElement(By.cssSelector(".ant-notification-notice-description")).getText().equals("Client devices reloaded.")) {
|
||||
|
||||
} else {
|
||||
failure(testId);
|
||||
fail("Notification did not appear");
|
||||
}
|
||||
}
|
||||
|
||||
public void clientDevicesScreen(int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
driver.findElement(By.linkText("Client Devices")).click();
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("Client Devices tab not visible");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//C5603
|
||||
@Test
|
||||
public void verifyNameFields() throws Exception {
|
||||
int testId = 5603;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(5000);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 0, testId);
|
||||
obj.verifyNetworkFields(false, "N/A", 0, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/" + testId, data);
|
||||
}
|
||||
|
||||
//C5604
|
||||
@Test
|
||||
public void verifyAlarmFields() throws Exception {
|
||||
int testId = 5604;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(5000);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 1, testId);
|
||||
obj.verifyNetworkFields(false, "N/A", 1, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/" + testId, data);
|
||||
}
|
||||
|
||||
//C5605
|
||||
@Test
|
||||
public void verifyModelField() throws Exception {
|
||||
int testId = 5605;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(5000);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 2, testId);
|
||||
obj.verifyNetworkFields(false, "N/A", 2, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/" + testId, data);
|
||||
}
|
||||
|
||||
//C5606
|
||||
@Test
|
||||
public void verifyIPField() throws Exception {
|
||||
int testId = 5606;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(5000);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 3, testId);
|
||||
obj.verifyNetworkFields(false, "N/A", 3, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/" + testId, data);
|
||||
}
|
||||
|
||||
//C5607
|
||||
@Test
|
||||
public void verifyMACField() throws Exception {
|
||||
int testId = 5607;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(5000);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 4, testId);
|
||||
obj.verifyNetworkFields(false, "N/A", 4, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/" + testId, data);
|
||||
}
|
||||
|
||||
//C5608
|
||||
@Test
|
||||
public void verifyManufacturerField() throws Exception {
|
||||
int testId = 5608;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(5000);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 5, testId);
|
||||
obj.verifyNetworkFields(false, "N/A", 5, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/" + testId, data);
|
||||
}
|
||||
|
||||
//C5609
|
||||
@Test
|
||||
public void verifyFirmwareField() throws Exception {
|
||||
int testId = 5609;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(5000);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 6, testId);
|
||||
obj.verifyNetworkFields(false, "N/A", 6, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/" + testId, data);
|
||||
}
|
||||
|
||||
//C5610
|
||||
@Test
|
||||
public void verifyAssetIdField() throws Exception {
|
||||
int testId = 5610;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(5000);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 7, testId);
|
||||
obj.verifyNetworkFields(false, "N/A", 7, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/" + testId, data);
|
||||
}
|
||||
|
||||
//C5611
|
||||
@Test
|
||||
public void verifyUpTimeField() throws Exception {
|
||||
int testId = 5611;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(5000);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 8, testId);
|
||||
obj.verifyNetworkFields(false, "N/A", 8, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/" + testId, data);
|
||||
}
|
||||
|
||||
//C5612
|
||||
@Test
|
||||
public void verifyProfileField() throws Exception {
|
||||
int testId = 5612;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(5000);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 9, testId);
|
||||
obj.verifyNetworkFields(false, "N/A", 9, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/" + testId, data);
|
||||
}
|
||||
|
||||
//C5613
|
||||
@Test
|
||||
public void verifyChannelField() throws Exception {
|
||||
int testId = 5613;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(5000);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 10, testId);
|
||||
obj.verifyNetworkFields(false, "N/A", 10, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/" + testId, data);
|
||||
}
|
||||
|
||||
//C5614
|
||||
@Test
|
||||
public void verifyOccupancyField() throws Exception {
|
||||
int testId = 5614;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(5000);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 11, testId);
|
||||
obj.verifyNetworkFields(false, "N/A", 11, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/" + testId, data);
|
||||
}
|
||||
|
||||
//C5615
|
||||
@Test
|
||||
public void verifyNoiseFloorField() throws Exception {
|
||||
int testId = 5615;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(5000);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 12, testId);
|
||||
obj.verifyNetworkFields(false, "N/A", 12, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/" + testId, data);
|
||||
}
|
||||
|
||||
//C5616
|
||||
@Test
|
||||
public void verifyDevicesField() throws Exception {
|
||||
int testId = 5616;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(5000);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 13, testId);
|
||||
obj.verifyNetworkFields(false, "N/A", 13, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/" + testId, data);
|
||||
}
|
||||
|
||||
//C5618
|
||||
@Test
|
||||
public void viewAPTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(5618);
|
||||
Thread.sleep(4500);
|
||||
obj.findNetwork("Open_AP_21P10C69907629", 5618);
|
||||
Thread.sleep(3000);
|
||||
obj.verifyAP("Open_AP_21P10C69907629", 5618);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5618", data);
|
||||
|
||||
}
|
||||
|
||||
//C5617
|
||||
@Test
|
||||
public void refreshButtonTestAccessPoints() throws Exception {
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(5617);
|
||||
Thread.sleep(4500);
|
||||
obj.refreshButton(5617);
|
||||
Thread.sleep(2000);
|
||||
obj.refreshNotificationAP(5617);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5617", data);
|
||||
|
||||
}
|
||||
|
||||
//C5590
|
||||
@Test
|
||||
public void refreshButtonTestClientDevices() throws Exception {
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(5590);
|
||||
Thread.sleep(4500);
|
||||
obj.clientDevicesScreen(5590);
|
||||
Thread.sleep(3500);
|
||||
obj.refreshButton(5590);
|
||||
Thread.sleep(2000);
|
||||
obj.refreshNotificationClientDevice(5590);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5590", data);
|
||||
|
||||
}
|
||||
|
||||
//C5592
|
||||
@Test
|
||||
public void viewDeviceTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(5592);
|
||||
Thread.sleep(4500);
|
||||
obj.clientDevicesScreen(5592);
|
||||
Thread.sleep(3500);
|
||||
obj.findNetwork("Mohammads-MBP", 5592);
|
||||
Thread.sleep(3000);
|
||||
obj.verifyDevice("Mohammads-MBP", 5592);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5592", data);
|
||||
|
||||
}
|
||||
|
||||
//C5619
|
||||
@Test
|
||||
public void addLocationTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(5619);
|
||||
Thread.sleep(4500);
|
||||
obj.addLocation("Test", 5619);
|
||||
Thread.sleep(3000);
|
||||
obj.deleteLocation("Test", 5619);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5619", data);
|
||||
|
||||
}
|
||||
|
||||
//C5620
|
||||
@Test
|
||||
public void deleteLocationTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(5620);
|
||||
Thread.sleep(4500);
|
||||
obj.addLocation("TestLoc", 5620);
|
||||
Thread.sleep(2000);
|
||||
obj.deleteLocation("TestLoc", 5620);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5620", data);
|
||||
|
||||
}
|
||||
|
||||
//C5591
|
||||
@Test
|
||||
public void clientBlockedListTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(5591);
|
||||
Thread.sleep(4500);
|
||||
obj.clientDevicesScreen(5591);
|
||||
Thread.sleep(3500);
|
||||
obj.clientBlockedListButton(5591);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5591", data);
|
||||
|
||||
}
|
||||
|
||||
//C5594
|
||||
@Test
|
||||
public void verifyDevicesMACField() throws Exception {
|
||||
int testId = 5594;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(2500);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(4500);
|
||||
obj.clientDevicesScreen(testId);
|
||||
Thread.sleep(2500);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 1, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
//C5595
|
||||
@Test
|
||||
public void verifyDevicesManufacturerField() throws Exception {
|
||||
int testId = 5595;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(2500);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(4500);
|
||||
obj.clientDevicesScreen(testId);
|
||||
Thread.sleep(2500);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 2, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
//C5596
|
||||
@Test
|
||||
public void verifyDevicesIPField() throws Exception {
|
||||
int testId = 5596;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(2500);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(4500);
|
||||
obj.clientDevicesScreen(testId);
|
||||
Thread.sleep(2500);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 3, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
//C5597
|
||||
@Test
|
||||
public void verifyDevicesHostNameField() throws Exception {
|
||||
int testId = 5597;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(2500);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(4500);
|
||||
obj.clientDevicesScreen(testId);
|
||||
Thread.sleep(2500);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 4, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
//C5598
|
||||
@Test
|
||||
public void verifyDevicesAPField() throws Exception {
|
||||
int testId = 5598;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(2500);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(4500);
|
||||
obj.clientDevicesScreen(testId);
|
||||
Thread.sleep(2500);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 5, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
//C5599
|
||||
@Test
|
||||
public void verifyDevicesSSIDField() throws Exception {
|
||||
int testId = 5599;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(2500);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(4500);
|
||||
obj.clientDevicesScreen(testId);
|
||||
Thread.sleep(2500);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 6, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
//C5600
|
||||
@Test
|
||||
public void verifyDevicesBandField() throws Exception {
|
||||
int testId = 5600;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(2500);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(4500);
|
||||
obj.clientDevicesScreen(testId);
|
||||
Thread.sleep(2500);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 7, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
//C5601
|
||||
@Test
|
||||
public void verifyDevicesSignalField() throws Exception {
|
||||
int testId = 5601;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(2500);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(4500);
|
||||
obj.clientDevicesScreen(testId);
|
||||
Thread.sleep(2500);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 8, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
//C5602
|
||||
@Test
|
||||
public void verifyDevicesStatusField() throws Exception {
|
||||
int testId = 5602;
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(2500);
|
||||
obj.networkScreen(testId);
|
||||
Thread.sleep(4500);
|
||||
obj.clientDevicesScreen(testId);
|
||||
Thread.sleep(2500);
|
||||
obj.loadAllProfiles(testId);
|
||||
obj.verifyNetworkFields(false, "", 9, testId);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
|
||||
//C5623
|
||||
@Test
|
||||
public void verifyAPLocationTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
NetworkTest obj = new NetworkTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.networkScreen(5623);
|
||||
Thread.sleep(4500);
|
||||
obj.findNetwork("Open_AP_21P10C69907629", 5623);
|
||||
Thread.sleep(3000);
|
||||
obj.verifyAPLocation(5623);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5623", data);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,798 +0,0 @@
|
||||
package automationTests;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Calendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.Keys;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.chrome.ChromeDriver;
|
||||
import org.openqa.selenium.chrome.ChromeOptions;
|
||||
import org.openqa.selenium.interactions.Actions;
|
||||
import org.openqa.selenium.support.ui.Select;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.Test;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.chrome.ChromeDriver;
|
||||
|
||||
public class ProfilesTest {
|
||||
WebDriver driver;
|
||||
|
||||
static APIClient client;
|
||||
static long runId;
|
||||
|
||||
// static String Url = System.getenv("CLOUD_SDK_URL");
|
||||
// static String trUser = System.getenv("TR_USER");
|
||||
// static String trPwd = System.getenv("TR_PWD");
|
||||
// static String cloudsdkUser = "support@example.com";
|
||||
// static String cloudsdkPwd="support";
|
||||
@BeforeClass
|
||||
public static void startTest() throws Exception
|
||||
{
|
||||
client = new APIClient("https://telecominfraproject.testrail.com");
|
||||
client.setUser("syama.devi@connectus.ai");
|
||||
client.setPassword("Connect123$");
|
||||
|
||||
JSONArray c = (JSONArray) client.sendGet("get_runs/5");
|
||||
runId = new Long(0);
|
||||
Calendar cal = Calendar.getInstance();
|
||||
//Months are indexed 0-11 so add 1 for current month
|
||||
int month = cal.get(Calendar.MONTH) + 1;
|
||||
String day = Integer.toString(cal.get(Calendar.DATE));
|
||||
if (day.length()<2) {
|
||||
day = "0"+day;
|
||||
}
|
||||
String date = "UI Automation Run - " + day + "/" + month + "/" + cal.get(Calendar.YEAR);
|
||||
for (int a = 0; a < c.size(); a++) {
|
||||
if (((JSONObject) c.get(a)).get("name").equals(date)) {
|
||||
runId = (Long) ((JSONObject) c.get(a)).get("id");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void launchBrowser() {
|
||||
System.setProperty("webdriver.chrome.driver", "/home/netex/nightly_sanity/ui-scripts/chromedriver");
|
||||
// System.setProperty("webdriver.chrome.driver", "/Users/mohammadrahman/Downloads/chromedriver");
|
||||
ChromeOptions options = new ChromeOptions();
|
||||
options.addArguments("--no-sandbox");
|
||||
options.addArguments("--headless");
|
||||
options.addArguments("--window-size=1920,1080");
|
||||
driver = new ChromeDriver(options);
|
||||
driver.get("https://wlan-ui.qa.lab.wlan.tip.build");
|
||||
}
|
||||
|
||||
void closeBrowser() {
|
||||
driver.close();
|
||||
}
|
||||
|
||||
//Log into the CloudSDK portal
|
||||
public void logIn() {
|
||||
driver.findElement(By.id("login_email")).sendKeys("support@example.com");
|
||||
driver.findElement(By.id("login_password")).sendKeys("support");
|
||||
driver.findElement(By.xpath("//*[@id=\"login\"]/button/span")).click();
|
||||
}
|
||||
|
||||
public void failure(int testId) throws MalformedURLException, IOException, APIException {
|
||||
driver.close();
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
|
||||
//Navigates to profiles tab
|
||||
public void profileScreen() throws Exception {
|
||||
driver.findElement(By.linkText("Profiles")).click();
|
||||
}
|
||||
|
||||
public void loadAllProfiles(int testId) throws Exception {
|
||||
try {
|
||||
while (driver.findElements(By.xpath("//*[@id=\"root\"]/section/main/div/div/div[3]/button/span")).size() != 0) {
|
||||
driver.findElement(By.xpath("/html/body/div/section/main/div/div/div[3]/button/span")).click();
|
||||
Thread.sleep(1400);
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Verifies whether profile exists
|
||||
public void findProfile(boolean expected, String profile, int testId) throws Exception {
|
||||
try {
|
||||
Thread.sleep(2500);
|
||||
WebElement tbl = driver.findElement(By.xpath("//table"));
|
||||
List<WebElement> rows = tbl.findElements(By.tagName("tr"));
|
||||
boolean found = false;
|
||||
//row iteration
|
||||
for(int i=0; i<rows.size(); i++) {
|
||||
//check column each in row, identification with 'td' tag
|
||||
List<WebElement> cols = rows.get(i).findElements(By.tagName("td"));
|
||||
|
||||
//column iteration
|
||||
for(int j=0; j<cols.size()-1; j++) {
|
||||
if (cols.get(j).getText().equals(profile)) {
|
||||
//System.out.prin
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (expected != found && expected == true) {
|
||||
failure(testId);
|
||||
fail("Profile not found.");
|
||||
} else if (expected != found && expected == false){
|
||||
failure(testId);
|
||||
fail("Profile unexpectedly found in the list.");
|
||||
}
|
||||
//Assert.assertEquals(expected, found);
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//Verifies whether profile exists and clicks
|
||||
public void findProfile(String profile, int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
WebElement tbl = driver.findElement(By.xpath("//table"));
|
||||
List<WebElement> rows = tbl.findElements(By.tagName("tr"));
|
||||
boolean found = false;
|
||||
breakP:
|
||||
//row iteration
|
||||
for(int i=0; i<rows.size(); i++) {
|
||||
//check column each in row, identification with 'td' tag
|
||||
List<WebElement> cols = rows.get(i).findElements(By.tagName("td"));
|
||||
|
||||
//column iteration
|
||||
for(int j=0; j<cols.size(); j++) {
|
||||
if (cols.get(j).getText().equals(profile)) {
|
||||
cols.get(j).click();
|
||||
found = true;
|
||||
break breakP;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
failure(testId);
|
||||
fail("Profile not found.");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
}
|
||||
|
||||
public void verifyProfile(String profile, int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
if (driver.findElement(By.cssSelector(".ant-form > .ant-card .ant-card-head-title")).getText().equals("Edit "+ profile)) {
|
||||
//Correct profile
|
||||
}
|
||||
else {
|
||||
failure(testId);
|
||||
fail("Incorrect Profile selected");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("No title found for profile");
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteProfileButton(int testId) throws Exception {
|
||||
try {
|
||||
driver.findElement(By.cssSelector("[title^='delete-AutomationTest Profile']")).click();
|
||||
Thread.sleep(2000);
|
||||
|
||||
if (driver.findElement(By.cssSelector(".ant-modal-title")).getText().equals("Are you sure?")){
|
||||
//No further steps needed
|
||||
} else {
|
||||
|
||||
fail("Popup displays incorrect text");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void deleteProfile(int testId) throws Exception {
|
||||
try {
|
||||
deleteProfileButton(testId);
|
||||
Thread.sleep(1000);
|
||||
driver.findElement(By.cssSelector(".ant-btn.index-module__Button___3SCd4.ant-btn-danger")).click();
|
||||
Thread.sleep(1000);
|
||||
driver.navigate().refresh();
|
||||
Thread.sleep(3000);
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void cancelDeleteProfile(int testId) throws Exception {
|
||||
try {
|
||||
deleteProfileButton(testId);
|
||||
Thread.sleep(1000);
|
||||
driver.findElement(By.cssSelector("body > div:nth-child(9) > div > div.ant-modal-wrap > div > div.ant-modal-content > div.ant-modal-footer > div > button:nth-child(1) > span")).click();
|
||||
Thread.sleep(1000);
|
||||
driver.navigate().refresh();
|
||||
Thread.sleep(1500);
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Clicks add profile button
|
||||
public void addProfileButton(int testId) throws Exception {
|
||||
try {
|
||||
driver.findElement(By.xpath("//*[@id=\"root\"]/section/main/div/div/div[1]/div/a/button/span")).click();
|
||||
Thread.sleep(1000);
|
||||
String URL = driver.getCurrentUrl();
|
||||
Assert.assertEquals("Incorrect URL", URL, "https://wlan-ui.qa.lab.wlan.tip.build/addprofile");
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Clicks refresh button
|
||||
public void refreshButton(int testId) throws Exception {
|
||||
try {
|
||||
//Select SSID from the drop-down
|
||||
driver.findElement(By.xpath("//*[@id=\"root\"]/section/main/div/div/div[1]/div/button")).click();
|
||||
Thread.sleep(1000);
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void refreshNotification(int testId) throws MalformedURLException, IOException, APIException {
|
||||
|
||||
try {
|
||||
if (driver.findElement(By.cssSelector(".ant-notification-notice-description")).getText().equals("Profiles reloaded")) {
|
||||
//pass
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("Notification not found");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void ssidDetails(int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
driver.findElement(By.xpath("//*[@id=\"name\"]")).sendKeys("AutomationTest Profile");
|
||||
driver.findElement(By.xpath("//*[@id=\"ssid\"]")).sendKeys("Automation Test SSID");
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void saveProfile(int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
driver.findElement(By.xpath("//*[@id=\"root\"]/section/main/div/div/div/div/button/span")).click();
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void abortCreatingProfile(int testId) throws Exception {
|
||||
try {
|
||||
driver.findElement(By.xpath("//*[@id=\"root\"]/section/main/div/div/div/button/span[2]")).click();
|
||||
Thread.sleep(1000);
|
||||
driver.findElement(By.cssSelector("body > div:nth-child(9) > div > div.ant-modal-wrap > div > div.ant-modal-content > "
|
||||
+ "div.ant-modal-footer > div > button.ant-btn.index-module__Button___3SCd4.ant-btn-primary")).click();
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void useCaptivePortal(int testId) throws Exception {
|
||||
try {
|
||||
driver.findElement(By.xpath("//*[@id=\"captivePortal\"]/label[2]/span[1]/input")).click();
|
||||
Thread.sleep(1000);
|
||||
|
||||
if (driver.findElements(By.xpath("//*[@id=\"captivePortalId\"]")).size()>0) {
|
||||
//successfully found drop-down
|
||||
} else {
|
||||
|
||||
fail("No options for captive portal found");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void ssidList(int testId) throws Exception {
|
||||
try {
|
||||
//System.out.print(driver.findElements(By.className("ant-select-selection-search-input")).size());
|
||||
Actions cursor = new Actions(driver);
|
||||
WebElement input = driver.findElement(By.cssSelector("#rc_select_1"));
|
||||
cursor.click(input);
|
||||
cursor.sendKeys(input, "EA8300_5G_WPA2").perform();
|
||||
cursor.sendKeys(input, Keys.ENTER).perform();
|
||||
Thread.sleep(3000);
|
||||
|
||||
if (driver.findElements(By.className("ant-table-empty")).size()!=0) {
|
||||
failure(testId);
|
||||
fail("Table not displaying SSIDs");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void bandwidthDetails(int testId) throws Exception {
|
||||
try {
|
||||
WebElement bandwidth = driver.findElement(By.xpath("//*[@id=\"bandwidthLimitDown\"]"));
|
||||
//Actions action = new Actions(driver);
|
||||
bandwidth.sendKeys(Keys.BACK_SPACE);
|
||||
bandwidth.sendKeys("123");
|
||||
Thread.sleep(500);
|
||||
|
||||
try {
|
||||
if (!driver.findElement(By.cssSelector("#root > section > main > div > div > form > div.index-module__ProfilePage___OaO8O > div:nth-child(1) > div.ant-card-body > div:nth-child(3) > div.ant-col.ant-col-12.ant-form-item-control > div > div > div > div.ant-row.ant-form-item.ant-form-item-with-help.ant-form-item-has-error > div > div.ant-form-item-explain > div"))
|
||||
.getText().equals("Downstream bandwidth limit can be a number between 0 and 100.")){
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
bandwidth.sendKeys(Keys.BACK_SPACE);
|
||||
bandwidth.sendKeys(Keys.BACK_SPACE);
|
||||
bandwidth.sendKeys(Keys.BACK_SPACE);
|
||||
|
||||
bandwidth.sendKeys("-10");
|
||||
Thread.sleep(500);
|
||||
|
||||
|
||||
try {
|
||||
if (!driver.findElement(By.cssSelector("#root > section > main > div > div > form > div.index-module__ProfilePage___OaO8O > div:nth-child(1) > div.ant-card-body > div:nth-child(3) > div.ant-col.ant-col-12.ant-form-item-control > div > div > div > div.ant-row.ant-form-item.ant-form-item-with-help.ant-form-item-has-error > div > div.ant-form-item-explain > div"))
|
||||
.getText().equals("Downstream bandwidth limit can be a number between 0 and 100.")){
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
|
||||
}
|
||||
|
||||
bandwidth.sendKeys(Keys.BACK_SPACE);
|
||||
bandwidth.sendKeys(Keys.BACK_SPACE);
|
||||
bandwidth.sendKeys(Keys.BACK_SPACE);
|
||||
|
||||
bandwidth.sendKeys("10");
|
||||
Thread.sleep(500);
|
||||
|
||||
|
||||
if (driver.findElements(By.cssSelector("#root > section > main > div > div > form > div.index-module__ProfilePage___OaO8O > div:nth-child(1) > div.ant-card-body > div:nth-child(3) > div.ant-col.ant-col-12.ant-form-item-control > div > div > div > div.ant-row.ant-form-item.ant-form-item-with-help.ant-form-item-has-error > div > div.ant-form-item-explain > div"))
|
||||
.size()!=0){
|
||||
failure(testId);
|
||||
fail();
|
||||
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void selectSSID(int testId) throws Exception {
|
||||
try {
|
||||
Actions cursor = new Actions(driver);
|
||||
cursor.sendKeys(Keys.TAB).perform();
|
||||
cursor.sendKeys(Keys.TAB).perform();
|
||||
cursor.sendKeys(Keys.TAB).perform();
|
||||
cursor.sendKeys(Keys.ENTER).perform();
|
||||
cursor.sendKeys(Keys.ENTER).perform();
|
||||
|
||||
Thread.sleep(1000);
|
||||
|
||||
boolean found = true;
|
||||
try {
|
||||
if (!driver.findElement(By.cssSelector("#root > section > main > div > div > form > div.index-module__ProfilePage___OaO8O > div:nth-child(1) > div.ant-card-head > div > div")).getText().equals("SSID")) {
|
||||
found = false;
|
||||
} else if (!driver.findElement(By.cssSelector("#root > section > main > div > div > form > div.index-module__ProfilePage___OaO8O > div:nth-child(2) > div.ant-card-head > div > div")).getText().equals("Network Connectivity")) {
|
||||
found = false;
|
||||
} else if (!driver.findElement(By.cssSelector("#root > section > main > div > div > form > div.index-module__ProfilePage___OaO8O > div:nth-child(3) > div.ant-card-head > div > div")).getText().equals("Security and Encryption")) {
|
||||
found = false;
|
||||
} else if (!driver.findElement(By.cssSelector("#root > section > main > div > div > form > div.index-module__ProfilePage___OaO8O > div:nth-child(4) > div.ant-card-head > div > div")).getText().equals("Roaming")) {
|
||||
found = false;
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
|
||||
}
|
||||
Assert.assertEquals(true, found);
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void selectAP(int testId) throws Exception {
|
||||
try {
|
||||
Actions cursor = new Actions(driver);
|
||||
cursor.sendKeys(Keys.TAB).perform();
|
||||
cursor.sendKeys(Keys.TAB).perform();
|
||||
cursor.sendKeys(Keys.TAB).perform();
|
||||
cursor.sendKeys(Keys.ENTER).perform();
|
||||
cursor.sendKeys(Keys.ARROW_DOWN).perform();
|
||||
cursor.sendKeys(Keys.ENTER).perform();
|
||||
Thread.sleep(1500);
|
||||
|
||||
try {
|
||||
if (!driver.findElement(By.cssSelector("#root > section > main > div > div > form > div.index-module__ProfilePage___OaO8O > div:nth-child(1) > div.ant-card-head > div > div")).getText().equals("LAN and Services")) {
|
||||
failure(testId);
|
||||
fail();
|
||||
} else if (!driver.findElement(By.cssSelector("#root > section > main > div > div > form > div.index-module__ProfilePage___OaO8O > div:nth-child(2) > div.ant-card-head > div > div")).getText().equals("Wireless Networks (SSIDs) Enabled on This Profile")) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
|
||||
//Assert.assertEquals(true, found);
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
//C4807
|
||||
@Test
|
||||
public void addProfileButtonTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
ProfilesTest obj = new ProfilesTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.profileScreen();
|
||||
Thread.sleep(2500);
|
||||
obj.addProfileButton(4807);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4807", data);
|
||||
}
|
||||
|
||||
//C4808
|
||||
@Test
|
||||
public void ssidOptionsVerificationTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
ProfilesTest obj = new ProfilesTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.profileScreen();
|
||||
Thread.sleep(2500);
|
||||
obj.addProfileButton(4808);
|
||||
Thread.sleep(1000);
|
||||
obj.selectSSID(4088);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4808", data);
|
||||
}
|
||||
|
||||
//C4809
|
||||
@Test
|
||||
public void apOptionsVerificationTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
ProfilesTest obj = new ProfilesTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.profileScreen();
|
||||
Thread.sleep(2500);
|
||||
obj.addProfileButton(4809);
|
||||
Thread.sleep(1000);
|
||||
obj.selectAP(4809);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4809", data);
|
||||
|
||||
}
|
||||
//C4824
|
||||
@Test
|
||||
public void refreshButtonTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
ProfilesTest obj = new ProfilesTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.profileScreen();
|
||||
Thread.sleep(2500);
|
||||
obj.refreshButton(4824);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4824", data);
|
||||
|
||||
}
|
||||
//C4818
|
||||
@Test
|
||||
public void bandwidthTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
|
||||
ProfilesTest obj = new ProfilesTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.profileScreen();
|
||||
Thread.sleep(2500);
|
||||
obj.addProfileButton(4818);
|
||||
Thread.sleep(1000);
|
||||
obj.selectSSID(4818);
|
||||
obj.ssidDetails(4818);
|
||||
obj.bandwidthDetails(4818);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4818", data);
|
||||
|
||||
}
|
||||
|
||||
//C4819
|
||||
@Test
|
||||
public void captivePortalDropdownTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
ProfilesTest obj = new ProfilesTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.profileScreen();
|
||||
Thread.sleep(2500);
|
||||
obj.addProfileButton(4819);
|
||||
Thread.sleep(1000);
|
||||
obj.selectSSID(4819);
|
||||
obj.ssidDetails(4819);
|
||||
obj.useCaptivePortal(4819);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4819", data);
|
||||
}
|
||||
|
||||
//C4822
|
||||
@Test
|
||||
public void ssidListTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
ProfilesTest obj = new ProfilesTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.profileScreen();
|
||||
Thread.sleep(2500);
|
||||
obj.addProfileButton(4822);
|
||||
Thread.sleep(1000);
|
||||
obj.selectAP(4822);
|
||||
Thread.sleep(500);
|
||||
obj.ssidList(4822);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4822", data);
|
||||
}
|
||||
//C4810
|
||||
@Test
|
||||
public void createProfileTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
ProfilesTest obj = new ProfilesTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.profileScreen();
|
||||
Thread.sleep(2500);
|
||||
obj.addProfileButton(4810);
|
||||
Thread.sleep(600);
|
||||
obj.selectSSID(4810);
|
||||
obj.ssidDetails(4810);
|
||||
obj.saveProfile(4810);
|
||||
Thread.sleep(1000);
|
||||
obj.loadAllProfiles(4810);
|
||||
obj.findProfile(true, "AutomationTest Profile",4810);
|
||||
obj.deleteProfile(4810);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4810", data);
|
||||
}
|
||||
//C4811
|
||||
@Test
|
||||
public void profileNotCreatedTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
ProfilesTest obj = new ProfilesTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.profileScreen();
|
||||
Thread.sleep(2500);
|
||||
obj.addProfileButton(4811);
|
||||
Thread.sleep(600);
|
||||
obj.selectSSID(4811);
|
||||
obj.ssidDetails(4811);
|
||||
obj.abortCreatingProfile(4811);
|
||||
Thread.sleep(1000);
|
||||
obj.loadAllProfiles(4811);
|
||||
obj.findProfile(false, "AutomationTest Profile",4811);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4811", data);
|
||||
}
|
||||
//C4814
|
||||
@Test
|
||||
public void deleteProfileTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
ProfilesTest obj = new ProfilesTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.profileScreen();
|
||||
Thread.sleep(2500);
|
||||
obj.addProfileButton(4814);
|
||||
Thread.sleep(600);
|
||||
obj.selectSSID(4814);
|
||||
obj.ssidDetails(4814);
|
||||
obj.saveProfile(4814);
|
||||
Thread.sleep(1000);
|
||||
obj.loadAllProfiles(4814);
|
||||
Thread.sleep(1000);
|
||||
obj.findProfile(true, "AutomationTest Profile",4814);
|
||||
obj.deleteProfile(4814);
|
||||
obj.loadAllProfiles(4814);
|
||||
Thread.sleep(1500);
|
||||
obj.findProfile(false, "AutomationTest Profile",4814);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4814", data);
|
||||
}
|
||||
|
||||
//C4813
|
||||
@Test
|
||||
public void cancelDeleteProfileTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
ProfilesTest obj = new ProfilesTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.profileScreen();
|
||||
Thread.sleep(2500);
|
||||
obj.addProfileButton(4813);
|
||||
Thread.sleep(600);
|
||||
obj.selectSSID(4813);
|
||||
obj.ssidDetails(4813);
|
||||
obj.saveProfile(4813);
|
||||
Thread.sleep(1000);
|
||||
obj.loadAllProfiles(4813);
|
||||
obj.findProfile(true, "AutomationTest Profile", 4813);
|
||||
obj.cancelDeleteProfile(4813);
|
||||
Thread.sleep(1500);
|
||||
obj.loadAllProfiles(4813);
|
||||
obj.findProfile(true, "AutomationTest Profile",4813);
|
||||
//Delete profile at the end of the test
|
||||
obj.deleteProfile(4813);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4813", data);
|
||||
}
|
||||
//C4812
|
||||
@Test
|
||||
public void verifyDeleteConfirmationTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
ProfilesTest obj = new ProfilesTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.profileScreen();
|
||||
Thread.sleep(2500);
|
||||
obj.addProfileButton(4812);
|
||||
Thread.sleep(600);
|
||||
obj.selectSSID(4812);
|
||||
obj.ssidDetails(4812);
|
||||
obj.saveProfile(4812);
|
||||
Thread.sleep(2000);
|
||||
obj.loadAllProfiles(4812);
|
||||
obj.findProfile(true, "AutomationTest Profile",4812);
|
||||
obj.deleteProfileButton(4812);
|
||||
obj.driver.navigate().refresh();
|
||||
Thread.sleep(2000);
|
||||
obj.loadAllProfiles(4812);
|
||||
obj.findProfile(true, "AutomationTest Profile",4812);
|
||||
//Delete profile at the end of the test
|
||||
obj.deleteProfile(4812);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4812", data);
|
||||
}
|
||||
//C4815
|
||||
@Test
|
||||
public void viewProfileTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
ProfilesTest obj = new ProfilesTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.profileScreen();
|
||||
Thread.sleep(2500);
|
||||
obj.findProfile("ECW5410 Automation",4815);
|
||||
Thread.sleep(5000);
|
||||
obj.verifyProfile("ECW5410 Automation",4815);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/4815", data);
|
||||
}
|
||||
//C5035
|
||||
@Test
|
||||
public void verifyFieldsTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
ProfilesTest obj = new ProfilesTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.profileScreen();
|
||||
Thread.sleep(2500);
|
||||
obj.loadAllProfiles(5035);
|
||||
obj.findProfile(false, "",5035);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5035", data);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,470 +0,0 @@
|
||||
package automationTests;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Calendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Test;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.Assert;
|
||||
import org.junit.BeforeClass;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.Keys;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.chrome.ChromeDriver;
|
||||
import org.openqa.selenium.chrome.ChromeOptions;
|
||||
import org.openqa.selenium.interactions.Actions;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.JSONValue;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class UsersTest{
|
||||
WebDriver driver;
|
||||
static APIClient client;
|
||||
static long runId;
|
||||
|
||||
// static String Url = System.getenv("CLOUD_SDK_URL");
|
||||
// static String trUser = System.getenv("TR_USER");
|
||||
// static String trPwd = System.getenv("TR_PWD");
|
||||
// static String cloudsdkUser = "support@example.com";
|
||||
// static String cloudsdkPwd="support";
|
||||
@BeforeClass
|
||||
public static void startTest() throws Exception
|
||||
{
|
||||
client = new APIClient("https://telecominfraproject.testrail.com");
|
||||
client.setUser("syama.devi@connectus.ai");
|
||||
client.setPassword("Connect123$");
|
||||
JSONArray c = (JSONArray) client.sendGet("get_runs/5");
|
||||
runId = new Long(0);
|
||||
|
||||
Calendar cal = Calendar.getInstance();
|
||||
//Months are indexed 0-11 so add 1 for current month
|
||||
int month = cal.get(Calendar.MONTH) + 1;
|
||||
String day = Integer.toString(cal.get(Calendar.DATE));
|
||||
if (day.length()<2) {
|
||||
day = "0"+day;
|
||||
}
|
||||
String date = "UI Automation Run - " + day + "/" + month + "/" + cal.get(Calendar.YEAR);
|
||||
|
||||
for (int a = 0; a < c.size(); a++) {
|
||||
if (((JSONObject) c.get(a)).get("name").equals(date)) {
|
||||
runId = (Long) ((JSONObject) c.get(a)).get("id");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void launchBrowser() {
|
||||
System.setProperty("webdriver.chrome.driver", "/home/netex/nightly_sanity/ui-scripts/chromedriver");
|
||||
// System.setProperty("webdriver.chrome.driver", "/Users/mohammadrahman/Downloads/chromedriver");
|
||||
ChromeOptions options = new ChromeOptions();
|
||||
options.addArguments("--no-sandbox");
|
||||
options.addArguments("--headless");
|
||||
options.addArguments("--window-size=1920,1080");
|
||||
driver = new ChromeDriver(options);
|
||||
driver.get("https://wlan-ui.qa.lab.wlan.tip.build");
|
||||
}
|
||||
|
||||
void closeBrowser() {
|
||||
driver.close();
|
||||
}
|
||||
|
||||
public void logIn() {
|
||||
driver.findElement(By.id("login_email")).sendKeys("support@example.com");
|
||||
driver.findElement(By.id("login_password")).sendKeys("support");
|
||||
driver.findElement(By.xpath("//*[@id=\"login\"]/button/span")).click();
|
||||
}
|
||||
|
||||
public void failure(int testId) throws MalformedURLException, IOException, APIException {
|
||||
driver.close();
|
||||
Map data = new HashMap();
|
||||
data.put("status_id", new Integer(5));
|
||||
data.put("comment", "Fail");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/"+testId, data);
|
||||
}
|
||||
|
||||
public void accountsScreen(int testId) throws Exception {
|
||||
try {
|
||||
driver.findElement(By.linkText("Users")).click();
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("Fail");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void addAccountButton(int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
Actions act = new Actions(driver);
|
||||
act.moveToElement(driver.findElement(By.cssSelector("[title^='addaccount']"))).click().perform();
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("Fail");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void verifyAddAccountPopup(int testId) throws MalformedURLException, IOException, APIException {
|
||||
Map data = new HashMap();
|
||||
try {
|
||||
if (driver.findElement(By.id("rcDialogTitle0")).getText().equals("Add User")) {
|
||||
//pass
|
||||
} else {
|
||||
|
||||
failure(testId);
|
||||
fail();
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("Fail");
|
||||
}
|
||||
}
|
||||
|
||||
public void addAccount(String account, String password, String confirmPassword, int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
addAccountButton(testId);
|
||||
Actions browser = new Actions(driver);
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(account).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(password).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(confirmPassword).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.ENTER).perform();
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("Fail");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void blankEmailWarning(int testId) throws Exception {
|
||||
try {
|
||||
if (driver.findElement(By.cssSelector("[role^='alert']")).getText().equals("Please input your e-mail")) {
|
||||
//pass
|
||||
} else {
|
||||
|
||||
failure(testId);
|
||||
fail("Incorrect warning displayed");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("No warning displayed");
|
||||
}
|
||||
}
|
||||
|
||||
public void invalidPasswordsWarning(int testId) throws Exception {
|
||||
try {
|
||||
if (driver.findElement(By.cssSelector("[role^='alert']")).getText().equals("The two passwords do not match")) {
|
||||
//pass
|
||||
} else {
|
||||
|
||||
failure(testId);
|
||||
fail("Incorrect warning displayed");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("No warning displayed");
|
||||
}
|
||||
}
|
||||
|
||||
public void invalidEmailWarning(int testId) throws Exception {
|
||||
try {
|
||||
if (driver.findElement(By.cssSelector("[role^='alert']")).getText().equals("The input is not a valid e-mail")) {
|
||||
//pass
|
||||
} else {
|
||||
|
||||
failure(testId);
|
||||
fail("Incorrect error displayed");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("No error displayed");
|
||||
}
|
||||
}
|
||||
|
||||
public void editAccount(String oldName, String newName, int testId) throws Exception {
|
||||
try {
|
||||
WebElement tbl = driver.findElement(By.xpath("//table"));
|
||||
List<WebElement> rows = tbl.findElements(By.tagName("tr"));
|
||||
boolean found = false;
|
||||
//row iteration
|
||||
breakP:
|
||||
for(int i=0; i<rows.size(); i++) {
|
||||
//check column each in row, identification with 'td' tag
|
||||
List<WebElement> cols = rows.get(i).findElements(By.tagName("td"));
|
||||
|
||||
//column iteration
|
||||
for(int j=0; j<cols.size()-1; j++) {
|
||||
|
||||
if (cols.get(j).getText().equals(oldName) && i!=1) {
|
||||
cols.get(2).click();
|
||||
found = true;
|
||||
break breakP;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
failure(testId);
|
||||
fail("Account not found");
|
||||
}
|
||||
Thread.sleep(1000);
|
||||
Actions browser = new Actions(driver);
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(newName).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys("Password1").perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys("Password1").perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.ENTER).perform();
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("Fail");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void deleteAccount(String profile, int testId) throws Exception {
|
||||
try {
|
||||
WebElement tbl = driver.findElement(By.xpath("//table"));
|
||||
List<WebElement> rows = tbl.findElements(By.tagName("tr"));
|
||||
boolean found = false;
|
||||
//row iteration
|
||||
breakP:
|
||||
for(int i=0; i<rows.size(); i++) {
|
||||
//check column each in row, identification with 'td' tag
|
||||
List<WebElement> cols = rows.get(i).findElements(By.tagName("td"));
|
||||
|
||||
//column iteration
|
||||
for(int j=0; j<cols.size()-1; j++) {
|
||||
|
||||
if (cols.get(j).getText().equals(profile) && i!=1) {
|
||||
cols.get(3).click();
|
||||
found = true;
|
||||
break breakP;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
failure(testId);
|
||||
fail("Account not found");
|
||||
}
|
||||
Thread.sleep(1000);
|
||||
Actions browser = new Actions(driver);
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.TAB).perform();
|
||||
browser.sendKeys(Keys.ENTER).perform();
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("Fail");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//Verifies whether profile exists
|
||||
public void findAccount(boolean expected, String profile, int testId) throws MalformedURLException, IOException, APIException {
|
||||
try {
|
||||
WebElement tbl = driver.findElement(By.xpath("//table"));
|
||||
List<WebElement> rows = tbl.findElements(By.tagName("tr"));
|
||||
boolean found = false;
|
||||
//row iteration
|
||||
for(int i=0; i<rows.size(); i++) {
|
||||
//check column each in row, identification with 'td' tag
|
||||
List<WebElement> cols = rows.get(i).findElements(By.tagName("td"));
|
||||
|
||||
//column iteration
|
||||
for(int j=0; j<cols.size()-1; j++) {
|
||||
if (cols.get(j).getText().equals(profile) && i!=1) {
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (expected != found && expected == true) {
|
||||
failure(testId);
|
||||
fail("Account not found.");
|
||||
} else if (expected != found && expected == false){
|
||||
failure(testId);
|
||||
fail("Account unexpectedly found in the list.");
|
||||
}
|
||||
} catch (Exception E) {
|
||||
failure(testId);
|
||||
fail("Fail");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//C5116
|
||||
@Test
|
||||
public void addAccountPopupTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
UsersTest obj = new UsersTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.accountsScreen(5116);
|
||||
Thread.sleep(2000);
|
||||
obj.addAccountButton(5116);
|
||||
Thread.sleep(1000);
|
||||
obj.verifyAddAccountPopup(5116);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5116", data);
|
||||
|
||||
}
|
||||
|
||||
//C5113
|
||||
@Test
|
||||
public void addAccountTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
UsersTest obj = new UsersTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.accountsScreen(5113);
|
||||
Thread.sleep(2000);
|
||||
obj.addAccount("automationtest@gmail.com","Password1","Password1", 5113);
|
||||
Thread.sleep(3000);
|
||||
obj.findAccount(true, "automationtest@gmail.com", 5113);
|
||||
Thread.sleep(1000);
|
||||
obj.deleteAccount("automationtest@gmail.com", 5113);
|
||||
Thread.sleep(2000);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5113", data);
|
||||
|
||||
}
|
||||
|
||||
//C5120
|
||||
@Test
|
||||
public void editAccountTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
UsersTest obj = new UsersTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.accountsScreen(5120);
|
||||
Thread.sleep(2000);
|
||||
obj.addAccount("automationtest@gmail.com","Password1","Password1", 5120);
|
||||
Thread.sleep(3000);
|
||||
obj.editAccount("automationtest@gmail.com", "automationtestEdit@gmail.com", 5120);
|
||||
Thread.sleep(1500);
|
||||
obj.findAccount(true, "automationtestEdit@gmail.com", 5120);
|
||||
obj.deleteAccount("automationtestEdit@gmail.com",5120);
|
||||
Thread.sleep(2000);
|
||||
obj.driver.navigate().refresh();
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5120", data);
|
||||
|
||||
}
|
||||
|
||||
//C5114
|
||||
@Test
|
||||
public void addAccountBlankDetailsTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
UsersTest obj = new UsersTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.accountsScreen(5114);
|
||||
Thread.sleep(2000);
|
||||
obj.addAccount("","Password1","Password1", 5114);
|
||||
Thread.sleep(1000);
|
||||
obj.blankEmailWarning(5114);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5114", data);
|
||||
|
||||
}
|
||||
|
||||
//C5117
|
||||
@Test
|
||||
public void addAccountInvalidPasswordTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
UsersTest obj = new UsersTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.accountsScreen(5117);
|
||||
Thread.sleep(2000);
|
||||
obj.addAccount("automationtest@gmail.com","Password1","password1",5117);
|
||||
Thread.sleep(1000);
|
||||
obj.invalidPasswordsWarning(5117);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5117", data);
|
||||
|
||||
}
|
||||
|
||||
//C5118
|
||||
@Test
|
||||
public void addAccountInvalidEmailTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
UsersTest obj = new UsersTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.accountsScreen(5118);
|
||||
Thread.sleep(2000);
|
||||
obj.addAccount("abcd12234","Password1","Password1",5118);
|
||||
Thread.sleep(3000);
|
||||
obj.invalidEmailWarning(5118);
|
||||
Thread.sleep(1000);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5118", data);
|
||||
|
||||
}
|
||||
//C5121
|
||||
@Test
|
||||
public void deleteAccountTest() throws Exception {
|
||||
Map data = new HashMap();
|
||||
UsersTest obj = new UsersTest();
|
||||
obj.launchBrowser();
|
||||
obj.logIn();
|
||||
Thread.sleep(3000);
|
||||
obj.accountsScreen(5121);
|
||||
Thread.sleep(2000);
|
||||
obj.addAccount("automationtest@gmail.com","Password1","Password1",5121);
|
||||
Thread.sleep(3000);
|
||||
obj.deleteAccount("automationtest@gmail.com",5121);
|
||||
Thread.sleep(4000);
|
||||
obj.driver.navigate().refresh();
|
||||
Thread.sleep(3000);
|
||||
obj.findAccount(false, "automationtest@gmail.com",5121);
|
||||
obj.closeBrowser();
|
||||
data.put("status_id", new Integer(1));
|
||||
data.put("comment", "This test worked fine!");
|
||||
JSONObject r = (JSONObject) client.sendPost("add_result_for_case/"+runId+"/5121", data);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
package automationTests;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Calendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.junit.internal.TextListener;
|
||||
import org.junit.runner.JUnitCore;
|
||||
import org.junit.runner.Result;
|
||||
|
||||
public class TestSuite {
|
||||
static APIClient client;
|
||||
public static void main(String args[]) throws Exception {
|
||||
|
||||
client = new APIClient("https://telecominfraproject.testrail.com");
|
||||
client.setUser("syama.devi@connectus.ai");
|
||||
client.setPassword("Connect123$");
|
||||
|
||||
JUnitCore junit = new JUnitCore();
|
||||
junit.addListener(new TextListener(System.out));
|
||||
Result result = junit.run(SystemTests.class);
|
||||
Result result1 = junit.run(ProfilesTest.class);
|
||||
Result result2 = junit.run(NetworkTest.class);
|
||||
Result result3 = junit.run(LoginTest.class);
|
||||
Result result4 = junit.run(UsersTest.class);
|
||||
Result result5 = junit.run(DashboardTest.class);
|
||||
if (result3.getFailureCount() > 0) {
|
||||
System.out.println("Tests failed.");
|
||||
System.exit(1);
|
||||
} else {
|
||||
System.out.println("Tests finished successfully.");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
109
cicd/README.txt
109
cicd/README.txt
@@ -1,109 +0,0 @@
|
||||
Potential polling method for CICD integration.
|
||||
|
||||
* Polling should decrease network security head-aches such as setting
|
||||
up VPN access for all test beds.
|
||||
|
||||
***
|
||||
|
||||
Implementation:
|
||||
|
||||
* Web server accessible to all CICD test beds runs a 'test orchestrator' logic, henceforth TO
|
||||
* This TO will periodically query jfrog for latest openwrt builds (see jfrog.pl)
|
||||
* If new build is found, a work-item file containing pertinent info, including the HW platform
|
||||
will be created, example:
|
||||
|
||||
CICD_TYPE=fast
|
||||
CICD_RPT_NAME=ea8300
|
||||
CICD_RPT_DIR=greearb@192.168.100.195:/var/www/html/tip/testbeds//ferndale-basic-01/reports
|
||||
CICD_HW=ea8300
|
||||
CICD_FILEDATE=
|
||||
CICD_GITHASH=
|
||||
CICD_URL=https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/
|
||||
CICD_FILE_NAME=ea8300
|
||||
CICD_URL_DATE=24-Apr-2020 16:32
|
||||
|
||||
* TO has manually configured list of test-beds, with some info about each test
|
||||
bed, including the DUT HW platform and testing capabilities.
|
||||
* It picks a test bed that matches the new build HW.
|
||||
* That test bed will have a URL directory for it and it alone.
|
||||
* The TO writes a new test configuration file into this directory.
|
||||
The test configuration file will have the info above, and also have other
|
||||
info including the tests to run and where to upload results when complete.
|
||||
* TO looks for any completed results, and removes the work-item if result is found.
|
||||
* TO will re-calculate historical charts and publish those if new results are found for a testbed.
|
||||
It could generate email and/or poke the results into testrails or similar at this point.
|
||||
* TO should run periodically every 1 minute or so to check on progress.
|
||||
|
||||
|
||||
* Test bed polling:
|
||||
* The test-bed (hence forth TB) will poll its directory on the TO web server to look for new jobs.
|
||||
* When new job is found, the TB will download the test config file, and use scp to upload a file
|
||||
to the TO to indicate it is working on the test.
|
||||
* When test is complete, TB will upload results to TO server. TO now knows test bed is available
|
||||
for more jobs.
|
||||
* TB should pause for 2 minutes after uploading results to make sure TO notices the new results and
|
||||
removes the old work item so that TB does not re-test the same work item.
|
||||
|
||||
|
||||
* If we can implement something like CTF, it may take place of the Test Orchestrator.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
************* Installation / Usage ***************
|
||||
|
||||
The jfrog.pl runs on the web server. This is the Test Orchestrator.
|
||||
Create a directory structure looking similar to this:
|
||||
|
||||
[greearb@ben-dt4 html]$ find tip -name "*" -print
|
||||
tip
|
||||
tip/testbeds
|
||||
tip/testbeds/ferndale-basic-01
|
||||
tip/testbeds/ferndale-basic-01/pending_work
|
||||
tip/testbeds/ferndale-basic-01/reports
|
||||
|
||||
Copy the TESTBED_INFO from wlan-testing git to the tip/testbeds directory:
|
||||
|
||||
[greearb@ben-dt4 testbeds]$ pwd
|
||||
/var/www/html/tip/testbeds
|
||||
cp -ar /home/greearb/git/tip/wlan-testing/cicd/ferndale-basic-01/ ./
|
||||
|
||||
|
||||
Run the jfrog.pl script from the tip/testbeds directory:
|
||||
|
||||
/home/greearb/git/tip/wlan-testing/cicd/jfrog.pl --passwd secret --tb_url_base greearb@192.168.100.195:/var/www/html/tip/testbeds/
|
||||
|
||||
A work-item file will be created as needed, in my case, it is here:
|
||||
|
||||
[greearb@ben-dt4 testbeds]$ cat ferndale-basic-01/pending_work/fast/CICD_TEST-ea8300
|
||||
CICD_TEST=fast
|
||||
CICD_RPT_DIR=greearb@192.168.100.195:/var/www/html/tip/testbeds//ferndale-basic-01/reports/fast
|
||||
CICD_RPT_NAME=ea8300
|
||||
CICD_HW=ea8300
|
||||
CICD_FILEDATE=
|
||||
CICD_GITHASH=
|
||||
CICD_URL=https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/
|
||||
CICD_FILE_NAME=ea8300
|
||||
CICD_URL_DATE=24-Apr-2020 16:32
|
||||
|
||||
|
||||
|
||||
************ Installation / Usage on Test Controller **************
|
||||
|
||||
# This runs on the test controller or Jump-Box.
|
||||
|
||||
# Set up OS
|
||||
sudo needs to work w/out password.
|
||||
|
||||
sudo chmod a+rwx /dev/ttyUSB*
|
||||
sudo pip3 install pexpect-serial
|
||||
|
||||
Run testbed_poll.pl from the cicd testbed directory:
|
||||
|
||||
The 192.168.100.195 system is the jfrog / Orchestrator machine. The jfrog
|
||||
password is so that it can download the OpenWrt binary file from jfrog.
|
||||
|
||||
cd ~/tip/wlan-testing/cicd/ferndale-basic-01
|
||||
|
||||
../testbed_poll.pl --jfrog_passwd secret --url http://192.168.100.195/tip/testbeds/testbed-ferndale-01/pending_work/
|
||||
@@ -1,4 +0,0 @@
|
||||
TESTBED_HW=ecw5410
|
||||
|
||||
# Controller's view of the test bed, from wlan-testing/cicd/[testbed] directory
|
||||
TESTBED_DIR=../../testbeds/ben-home-ecw5410
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
while true
|
||||
do
|
||||
../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read --url http://192.168.100.195/tip/testbeds/ben-home-ecw5410/pending_work/ || exit 1
|
||||
sleep 120
|
||||
done
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
TESTBED_HW=mr8300
|
||||
|
||||
# Controller's view of the test bed, from wlan-testing/cicd/[testbed] directory
|
||||
TESTBED_DIR=../../testbeds/ben-home
|
||||
@@ -1,8 +0,0 @@
|
||||
TESTBED_HW=ea8300
|
||||
TESTBED_NAME=Ferndale-01
|
||||
|
||||
# Controller's view of the test bed, from wlan-testing/cicd/[testbed] directory
|
||||
TESTBED_DIR=../../testbeds/ferndale-basic-01
|
||||
|
||||
TESTBED_CASEID_FAST=C1308
|
||||
TESTBED_CASEID_BASIC=C1309
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
while true
|
||||
do
|
||||
../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read --url http://orch/tip/testbeds/ferndale-basic-01/pending_work/
|
||||
sleep 120
|
||||
done
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
while true
|
||||
do
|
||||
../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read --url http://orch/tip/testbeds/ferndale-basic-01/pending_work/
|
||||
exit 0
|
||||
done
|
||||
493
cicd/jfrog.pl
493
cicd/jfrog.pl
@@ -1,493 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# Query jfrog URL and get list of builds.
|
||||
# This will be run on the test-bed orchestrator
|
||||
# Run this in directory that contains the testbed_$hw/ directories
|
||||
# Assumes cicd.class is found in ~/git/tip/wlan-lanforge-scripts/gui/
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Getopt::Long;
|
||||
|
||||
my $user = "cicd_user";
|
||||
my $passwd = "";
|
||||
my $url = "https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware";
|
||||
my @platforms = ("ea8300", "ecw5410", "ec420", "eap102", "wf188n"); # Add more here as we have test beds that support them.
|
||||
my $files_processed = "jfrog_files_processed.txt";
|
||||
my $tb_url_base = "cicd_user\@tip.cicd.cloud.com/testbeds"; # Used by SSH: scp -R results_dir cicd_user@tip.cicd.cloud.com/testbeds/
|
||||
my $help = 0;
|
||||
my $cicd_prefix = "CICD_TEST";
|
||||
my $kpi_dir = "/home/greearb/git/tip/wlan-lanforge-scripts/gui/";
|
||||
my @ttypes = ("fast", "basic");
|
||||
my $duplicate_work = 1;
|
||||
my $slack = ""; # file that holds slack URL in case we want the kpi tool to post slack announcements.
|
||||
|
||||
#my $ul_host = "www";
|
||||
my $ul_host = "";
|
||||
my $ul_dir = "candela_html/examples/cicd/"; # used by scp
|
||||
my $ul_dest = "$ul_host:$ul_dir"; # used by scp
|
||||
my $other_ul_dest = ""; # used by scp
|
||||
my $result_url_base = "http://localhost/tip/cicd";
|
||||
|
||||
my $usage = qq($0
|
||||
[--user { jfrog user (default: cicd_user) }
|
||||
[--passwd { jfrog password }
|
||||
[--slack { file holding slack webhook URL }
|
||||
[--result_url_base { http://foo.com/tip/cicd }
|
||||
[--url { jfrog URL, default is OpenWrt URL: https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/ }
|
||||
[--files_processed { text file containing file names we have already processed }
|
||||
[--tb_url_base { Where to report the test results? }
|
||||
[--kpi_dir { Where the kpi java binary is found }
|
||||
[--ul_host { Host that results should be copied too }
|
||||
[--duplicate_work { Should we send work items to all available test beds? Default is 1 (true). Set to 0 to only send to one. }
|
||||
|
||||
Example:
|
||||
|
||||
# Use TIP jfrog repo
|
||||
$0 --user cicd_user --passwd secret --url https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/ \\
|
||||
--files_processed jfrog_files_processed.txt \\
|
||||
--tb_url_base cicd_user\@tip.cicd.cloud.com/testbeds
|
||||
|
||||
# Download images from candelatech.com web site (for developer testing and such)
|
||||
$0 --tb_url_base greearb@192.168.100.195:/var/www/html/tip/testbeds/ \\
|
||||
--url http://www.candelatech.com/downloads/tip/test_images
|
||||
|
||||
# This is what is used in TIP testbed orchestrator
|
||||
$0 --passwd tip-read --user tip-read --tb_url_base lanforge\@orch:/var/www/html/tip/testbeds/ \\
|
||||
--kpi_dir /home/lanforge/git/tip/wlan-lanforge-scripts/gui \\
|
||||
--slack /home/lanforge/slack.txt \\
|
||||
--result_url_base http://3.130.51.163/tip/testbeds
|
||||
|
||||
);
|
||||
|
||||
GetOptions
|
||||
(
|
||||
'user=s' => \$user,
|
||||
'passwd=s' => \$passwd,
|
||||
'slack=s' => \$slack,
|
||||
'url=s' => \$url,
|
||||
'files_processed=s' => \$files_processed,
|
||||
'tb_url_base=s' => \$tb_url_base,
|
||||
'result_url_base=s' => \$result_url_base,
|
||||
'kpi_dir=s' => \$kpi_dir,
|
||||
'ul_host=s' => \$ul_host,
|
||||
'duplicate_work=i' => \$duplicate_work,
|
||||
'help|?' => \$help,
|
||||
) || (print($usage) && exit(1));
|
||||
|
||||
if ($help) {
|
||||
print($usage) && exit(0);
|
||||
}
|
||||
|
||||
#if ($passwd eq "") {
|
||||
# print("ERROR: You must specify jfrog password.\n");
|
||||
# exit(1);
|
||||
#}
|
||||
|
||||
my $slack_fname = "";
|
||||
if ($slack ne "") {
|
||||
$slack_fname = "--slack_fname $slack";
|
||||
}
|
||||
|
||||
my $i;
|
||||
|
||||
my $pwd = `pwd`;
|
||||
chomp($pwd);
|
||||
|
||||
my $listing;
|
||||
my @lines;
|
||||
my $j;
|
||||
my $do_nightly = 0;
|
||||
|
||||
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
|
||||
my $last_hr = `cat last_jfrog_hour.txt`;
|
||||
my $lh = 24;
|
||||
if ($last_hr ne "") {
|
||||
$lh = int($last_hr);
|
||||
if ($lh > $hour) {
|
||||
# tis the wee hours again, run a nightly.
|
||||
$do_nightly = 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$do_nightly = 1;
|
||||
}
|
||||
`echo $hour > last_jfrog_hour.txt`;
|
||||
|
||||
# Check for any completed reports.
|
||||
for ($j = 0; $j<@ttypes; $j++) {
|
||||
my $ttype = $ttypes[$j];
|
||||
$listing = `ls */reports/$ttype/NEW_RESULTS-*`;
|
||||
@lines = split(/\n/, $listing);
|
||||
for ($i = 0; $i<@lines; $i++) {
|
||||
my $ln = $lines[$i];
|
||||
chomp($ln);
|
||||
if ($ln =~ /(.*)\/NEW_RESULTS/) {
|
||||
my $process = $1; # For example: ben-home/reports/fast
|
||||
my $completed = `cat $ln`; # Contents of the results file
|
||||
chomp($completed);
|
||||
if ($ln =~ /(.*)\/reports\/$ttype\/NEW_RESULTS/) {
|
||||
my $tbed = $1;
|
||||
my $cmd;
|
||||
my $caseid = "";
|
||||
my $tb_pretty_name = $tbed;
|
||||
my $tb_hw_type = "";
|
||||
|
||||
my $tb_info = `cat $tbed/TESTBED_INFO.txt`;
|
||||
if ($tb_info =~ /TESTBED_HW=(.*)/g) {
|
||||
$tb_hw_type = $1;
|
||||
}
|
||||
if ($tb_info =~ /TESTBED_NAME=(.*)/g) {
|
||||
$tb_pretty_name = $1;
|
||||
}
|
||||
|
||||
print "Processing new results, line: $ln process: $process completed: $completed testbed: $tbed\n";
|
||||
|
||||
# Figure out the new directory from the work-item.
|
||||
my $wi = `cat ./$tbed/pending_work/$completed`;
|
||||
|
||||
`mv ./$tbed/pending_work/$completed /tmp/`;
|
||||
|
||||
if ($wi =~ /CICD_CASE_ID=(\S+)/) {
|
||||
$caseid = "--caseid $1";
|
||||
}
|
||||
|
||||
if ($wi =~ /CICD_RPT_NAME=(.*)/) {
|
||||
my $widir = $1;
|
||||
|
||||
if ($ul_host ne "") {
|
||||
# Ensure we have a place to copy the new report
|
||||
$cmd = "ssh $ul_host \"mkdir -p $ul_dir/$tbed/$ttype\"";
|
||||
print "Ensure directory exists: $cmd\n";
|
||||
`$cmd`;
|
||||
|
||||
# Upload the report directory
|
||||
$cmd = "scp -C -r $process/$widir $ul_dest/$tbed/$ttype/";
|
||||
print "Uploading: $cmd\n";
|
||||
`$cmd`;
|
||||
}
|
||||
}
|
||||
else {
|
||||
print "WARNING: No CICD_RPT_NAME line found in work-item contents:\n$wi\n";
|
||||
}
|
||||
|
||||
$caseid .= " --results_url $result_url_base/$tbed/reports/$ttype";
|
||||
|
||||
$cmd = "cd $kpi_dir && java kpi $slack_fname --testbed_name \"$tb_pretty_name $tb_hw_type $ttype\" $caseid --dir \"$pwd/$process\" && cd -";
|
||||
print ("Running kpi: $cmd\n");
|
||||
`$cmd`;
|
||||
`rm $ln`;
|
||||
if ($ul_host ne "") {
|
||||
$cmd = "scp -C $process/*.png $process/*.html $process/*.csv $process/*.ico $process/*.css $ul_dest/$tbed/$ttype/";
|
||||
print "Uploading: $cmd";
|
||||
`$cmd`;
|
||||
}
|
||||
|
||||
# This might need similar partial-upload logic as that above, if it is ever actually
|
||||
# enabled.
|
||||
if ($other_ul_dest ne "") {
|
||||
$cmd = "scp -C -r $process $other_ul_dest/$tbed/";
|
||||
print "Uploading to secondary location: $cmd";
|
||||
`$cmd`;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Read in already_processed builds
|
||||
my @processed = ();
|
||||
$listing = `cat $files_processed`;
|
||||
@lines = split(/\n/, $listing);
|
||||
for ($i = 0; $i<@lines; $i++) {
|
||||
my $ln = $lines[$i];
|
||||
chomp($ln);
|
||||
print("Reported already processed: $ln\n");
|
||||
push(@processed, $ln);
|
||||
}
|
||||
|
||||
my $z;
|
||||
if ($do_nightly) {
|
||||
# Remove last 'pending' instance of each HW type so that we re-run the test for it.
|
||||
for ($z = 0; $z < @platforms; $z++) {
|
||||
my $q;
|
||||
my $hw = $platforms[$z];
|
||||
for ($q = @processed - 1; $q >= 0; $q--) {
|
||||
if ($processed[$q] =~ /$hw/) {
|
||||
print("Nightly, re-doing: $processed[$q]\n");
|
||||
$processed[$q] = "";
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for ($z = 0; $z<@platforms; $z++) {
|
||||
my $pf = $platforms[$z];
|
||||
# Interesting builds are now found in hardware sub-dirs
|
||||
my @subdirs = ("trunk", "dev");
|
||||
for (my $sidx = 0; $sidx<@subdirs; $sidx++) {
|
||||
my $sdir = $subdirs[$sidx];
|
||||
my $cmd = "curl -u $user:$passwd $url/$pf/$sdir/";
|
||||
print ("Calling command: $cmd\n");
|
||||
$listing = `$cmd`;
|
||||
@lines = split(/\n/, $listing);
|
||||
for ($i = 0; $i<@lines; $i++) {
|
||||
my $ln = $lines[$i];
|
||||
chomp($ln);
|
||||
|
||||
#print("ln -:$ln:-\n");
|
||||
|
||||
if (($ln =~ /href=\"(.*)\">(.*)<\/a>\s+(.*)\s+\S+\s+\S+/)
|
||||
|| ($ln =~ /class=\"indexcolname\"><a href=\"(.*.tar.gz)\">(.*)<\/a>.*class=\"indexcollastmod\">(\S+)\s+.*/)) {
|
||||
my $fname = $1;
|
||||
my $name = $2;
|
||||
my $date = $3;
|
||||
|
||||
# Skip header
|
||||
if ($ln =~ /Last modified/) {
|
||||
next;
|
||||
}
|
||||
|
||||
# Skip parent-dir
|
||||
if ($ln =~ /Parent Directory/) {
|
||||
next;
|
||||
}
|
||||
|
||||
# Skip artifacts directory
|
||||
if ($ln =~ /artifacts/) {
|
||||
next;
|
||||
}
|
||||
|
||||
# Skip staging builds
|
||||
if ($ln =~ /staging/) {
|
||||
next;
|
||||
}
|
||||
|
||||
# Skip dev directory
|
||||
#if ($ln =~ /href=\"dev\/\">dev\/<\/a>/) {
|
||||
# next;
|
||||
#}
|
||||
|
||||
#print("line matched -:$ln:-\n");
|
||||
#print("fname: $fname name: $name date: $date\n");
|
||||
|
||||
if ( grep( /^$fname\s+/, @processed ) ) {
|
||||
# Skip this one, already processed.
|
||||
next;
|
||||
}
|
||||
|
||||
my $hw = "";
|
||||
my $fdate = "";
|
||||
my $githash = "";
|
||||
|
||||
if ($fname =~ /^(\S+)-(\d\d\d\d-\d\d-\d\d)-(\S+).tar.gz/) {
|
||||
$hw = $1;
|
||||
$fdate = $2;
|
||||
$githash = $3;
|
||||
} else {
|
||||
print "ERROR: Un-handled filename syntax: $fname, assuming file-name is hardware name.\n";
|
||||
$hw = $fname;
|
||||
}
|
||||
|
||||
# Find the least used testbed for this hardware.
|
||||
my $dirs = `ls`;
|
||||
my @dira = split(/\n/, $dirs);
|
||||
my $best_tb = "";
|
||||
my $best_backlog = 0;
|
||||
my $di;
|
||||
for ($di = 0; $di<@dira; $di++) {
|
||||
my $dname = $dira[$di];
|
||||
chomp($dname);
|
||||
if (! -d $dname) {
|
||||
next;
|
||||
}
|
||||
if (! -f "$dname/TESTBED_INFO.txt") {
|
||||
next;
|
||||
}
|
||||
my $tb_info = `cat $dname/TESTBED_INFO.txt`;
|
||||
my $tb_hw_type = "";
|
||||
if ($tb_info =~ /TESTBED_HW=(.*)/g) {
|
||||
$tb_hw_type = $1;
|
||||
}
|
||||
if (!hw_matches($tb_hw_type, $hw)) {
|
||||
print "Skipping test bed $dname, jfrog hardware type: -:$hw:- testbed hardware type: -:$tb_hw_type:-\n";
|
||||
next;
|
||||
}
|
||||
print "Checking testbed $dname backlog..\n";
|
||||
my $bklog = `ls $dname/pending_work/$cicd_prefix-*`;
|
||||
my $bklog_count = split(/\n/, $bklog);
|
||||
if ($best_tb eq "") {
|
||||
$best_tb = $dname;
|
||||
$best_backlog = $bklog_count;
|
||||
} else {
|
||||
if ($best_backlog > $bklog_count) {
|
||||
$best_tb = $dname;
|
||||
$best_backlog = $bklog_count;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($best_tb eq "") {
|
||||
print "ERROR: No test bed found for hardware type: $hw\n";
|
||||
last;
|
||||
}
|
||||
|
||||
my $fname_nogz = $fname;
|
||||
if ($fname =~ /(.*)\.tar\.gz/) {
|
||||
$fname_nogz = $1;
|
||||
}
|
||||
|
||||
my @tbs = ($best_tb);
|
||||
|
||||
# For more test coverage, send work to rest of the available test beds as well.
|
||||
if ($duplicate_work) {
|
||||
for ($di = 0; $di<@dira; $di++) {
|
||||
my $dname = $dira[$di];
|
||||
chomp($dname);
|
||||
if (! -d $dname) {
|
||||
next;
|
||||
}
|
||||
if ($dname eq $best_tb) {
|
||||
next; # processed this one above
|
||||
}
|
||||
if (! -f "$dname/TESTBED_INFO.txt") {
|
||||
next;
|
||||
}
|
||||
|
||||
my $tb_info = `cat $dname/TESTBED_INFO.txt`;
|
||||
my $tb_hw_type = "";
|
||||
if ($tb_info =~ /TESTBED_HW=(.*)/g) {
|
||||
$tb_hw_type = $1;
|
||||
}
|
||||
|
||||
if (!hw_matches($tb_hw_type, $hw)) {
|
||||
print "Skipping test bed $dname, jfrog hardware type: -:$hw:- testbed hardware type: -:$tb_hw_type:-\n";
|
||||
next;
|
||||
}
|
||||
|
||||
push(@tbs, "$dname");
|
||||
}
|
||||
}
|
||||
|
||||
my $q;
|
||||
for ($q = 0; $q < @tbs; $q++) {
|
||||
$best_tb = $tbs[$q];
|
||||
my $caseid_fast = "";
|
||||
my $caseid_basic = "";
|
||||
|
||||
my $tb_info = `cat $best_tb/TESTBED_INFO.txt`;
|
||||
if ($tb_info =~ /TESTBED_CASEID_FAST=(.*)/g) {
|
||||
$caseid_fast = $1;
|
||||
}
|
||||
if ($tb_info =~ /TESTBED_CASEID_BASIC=(.*)/g) {
|
||||
$caseid_basic = $1;
|
||||
}
|
||||
|
||||
my $ttype = "fast";
|
||||
# Ensure duplicate runs show up individually.
|
||||
my $extra_run = 0;
|
||||
if (-e "$best_tb/reports/$ttype/${fname_nogz}") {
|
||||
$extra_run = 1;
|
||||
while (-e "$best_tb/reports/$ttype/${fname_nogz}-$extra_run") {
|
||||
$extra_run++;
|
||||
}
|
||||
}
|
||||
|
||||
my $erun = "";
|
||||
if ($extra_run > 0) {
|
||||
$erun = "-$extra_run";
|
||||
}
|
||||
|
||||
my $work_fname = "$best_tb/pending_work/$cicd_prefix-$fname_nogz-$ttype";
|
||||
my $work_fname_a = $work_fname;
|
||||
|
||||
system("mkdir -p $best_tb/pending_work");
|
||||
system("mkdir -p $best_tb/reports/$ttype");
|
||||
|
||||
open(FILE, ">", "$work_fname");
|
||||
|
||||
print FILE "CICD_TYPE=$ttype\n";
|
||||
print FILE "CICD_RPT_NAME=$fname_nogz$erun\n";
|
||||
print FILE "CICD_RPT_DIR=$tb_url_base/$best_tb/reports/$ttype\n";
|
||||
|
||||
print FILE "CICD_HW=$hw\nCICD_FILEDATE=$fdate\nCICD_GITHASH=$githash\n";
|
||||
print FILE "CICD_URL=$url/$pf/$sdir\nCICD_FILE_NAME=$fname\nCICD_URL_DATE=$date\n";
|
||||
if ($caseid_fast ne "") {
|
||||
print FILE "CICD_CASE_ID=$caseid_fast\n";
|
||||
}
|
||||
|
||||
close(FILE);
|
||||
|
||||
print("Next: File Name: $fname Display Name: $name Date: $date TType: $ttype\n");
|
||||
print("Work item placed at: $work_fname\n");
|
||||
|
||||
|
||||
$ttype = "basic";
|
||||
# Ensure duplicate runs show up individually.
|
||||
$extra_run = 0;
|
||||
if (-e "$best_tb/reports/$ttype/${fname_nogz}") {
|
||||
$extra_run = 1;
|
||||
while (-e "$best_tb/reports/$ttype/${fname_nogz}-$extra_run") {
|
||||
$extra_run++;
|
||||
}
|
||||
}
|
||||
|
||||
$erun = "";
|
||||
if ($extra_run > 0) {
|
||||
$erun = "-$extra_run";
|
||||
}
|
||||
|
||||
$work_fname = "$best_tb/pending_work/$cicd_prefix-$fname_nogz-$ttype";
|
||||
|
||||
system("mkdir -p $best_tb/reports/$ttype");
|
||||
|
||||
open(FILE, ">", "$work_fname");
|
||||
|
||||
print FILE "CICD_TYPE=$ttype\n";
|
||||
print FILE "CICD_RPT_NAME=$fname_nogz$erun\n";
|
||||
print FILE "CICD_RPT_DIR=$tb_url_base/$best_tb/reports/$ttype\n";
|
||||
|
||||
print FILE "CICD_HW=$hw\nCICD_FILEDATE=$fdate\nCICD_GITHASH=$githash\n";
|
||||
print FILE "CICD_URL=$url/$pf/$sdir\nCICD_FILE_NAME=$fname\nCICD_URL_DATE=$date\n";
|
||||
if ($caseid_basic ne "") {
|
||||
print FILE "CICD_CASE_ID=$caseid_basic\n";
|
||||
}
|
||||
|
||||
close(FILE);
|
||||
|
||||
print("Next: File Name: $fname Display Name: $name Date: $date TType: $ttype\n");
|
||||
print("Work item placed at: $work_fname\n");
|
||||
#print("To download: curl --location -o /tmp/$fname -u $user:$passwd $url/$pf/$fname\n");
|
||||
} # for all testbeds
|
||||
|
||||
# Note this one is processed
|
||||
`echo -n "$fname " >> $files_processed`;
|
||||
`date >> $files_processed`;
|
||||
}
|
||||
|
||||
#print "$ln\n";
|
||||
}# for all lines in a directory listing
|
||||
}# For all sub directories
|
||||
}# for all URLs to process
|
||||
|
||||
exit 0;
|
||||
|
||||
|
||||
sub hw_matches {
|
||||
my $a = shift;
|
||||
my $b = shift;
|
||||
|
||||
# Normalize equivalent HW types.
|
||||
if ($a eq "mr8300") {
|
||||
$a = "ea8300";
|
||||
}
|
||||
if ($b eq "mr8300") {
|
||||
$b = "ea8300";
|
||||
}
|
||||
|
||||
if ($a eq $b) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
TESTBED_HW=ecw5410
|
||||
TESTBED_NAME=NOLA-01
|
||||
|
||||
# Controller's view of the test bed, from wlan-testing/cicd/[testbed] directory
|
||||
TESTBED_DIR=../../testbeds/nola-basic-01
|
||||
|
||||
#TESTBED_CASEID_FAST=C1308
|
||||
#TESTBED_CASEID_BASIC=C1309
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
while true
|
||||
do
|
||||
../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read --url http://orch/tip/testbeds/nola-basic-01/pending_work/
|
||||
sleep 120
|
||||
done
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
TESTBED_HW=ecw5410
|
||||
TESTBED_NAME=NOLA-02
|
||||
|
||||
# Controller's view of the test bed, from wlan-testing/cicd/[testbed] directory
|
||||
TESTBED_DIR=../../testbeds/nola-basic-02
|
||||
|
||||
#TESTBED_CASEID_FAST=C1308
|
||||
#TESTBED_CASEID_BASIC=C1309
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
while true
|
||||
do
|
||||
../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read --url http://orch/tip/testbeds/nola-basic-02/pending_work/
|
||||
sleep 120
|
||||
done
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
TESTBED_HW=ec420
|
||||
TESTBED_NAME=NOLA-03
|
||||
|
||||
# Controller's view of the test bed, from wlan-testing/cicd/[testbed] directory
|
||||
TESTBED_DIR=../../testbeds/nola-basic-03
|
||||
|
||||
#TESTBED_CASEID_FAST=C1308
|
||||
#TESTBED_CASEID_BASIC=C1309
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
while true
|
||||
do
|
||||
../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read --url http://orch/tip/testbeds/nola-basic-03/pending_work/
|
||||
sleep 120
|
||||
done
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
TESTBED_HW=ecw5410
|
||||
TESTBED_NAME=NOLA-04
|
||||
|
||||
# Controller's view of the test bed, from wlan-testing/cicd/[testbed] directory
|
||||
TESTBED_DIR=../../testbeds/nola-basic-04
|
||||
|
||||
#TESTBED_CASEID_FAST=C1308
|
||||
#TESTBED_CASEID_BASIC=C1309
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
while true
|
||||
do
|
||||
../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read --url http://orch/tip/testbeds/nola-basic-04/pending_work/
|
||||
sleep 120
|
||||
done
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
TESTBED_HW=wf188n
|
||||
TESTBED_NAME=NOLA-12
|
||||
|
||||
# Controller's view of the test bed, from wlan-testing/cicd/[testbed] directory
|
||||
TESTBED_DIR=../../testbeds/nola-basic-12
|
||||
|
||||
#TESTBED_CASEID_FAST=C1308
|
||||
#TESTBED_CASEID_BASIC=C1309
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
while true
|
||||
do
|
||||
../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read --url http://orch/tip/testbeds/nola-basic-12/pending_work/ --dut_passwd openwifi --dut_user root --log stdout
|
||||
sleep 120
|
||||
done
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
TESTBED_HW=eap102
|
||||
TESTBED_NAME=NOLA-13
|
||||
|
||||
# Controller's view of the test bed, from wlan-testing/cicd/[testbed] directory
|
||||
TESTBED_DIR=../../testbeds/nola-basic-13
|
||||
|
||||
#TESTBED_CASEID_FAST=C1308
|
||||
#TESTBED_CASEID_BASIC=C1309
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
while true
|
||||
do
|
||||
../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read --url http://orch/tip/testbeds/nola-basic-13/pending_work/ --dut_passwd openwifi --dut_user root
|
||||
sleep 120
|
||||
done
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
TESTBED_HW=eap102
|
||||
TESTBED_NAME=NOLA-14
|
||||
|
||||
# Controller's view of the test bed, from wlan-testing/cicd/[testbed] directory
|
||||
TESTBED_DIR=../../testbeds/nola-basic-14
|
||||
|
||||
#TESTBED_CASEID_FAST=C1308
|
||||
#TESTBED_CASEID_BASIC=C1309
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
while true
|
||||
do
|
||||
../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read --url http://orch/tip/testbeds/nola-basic-14/pending_work/ --dut_passwd openwifi --dut_user root
|
||||
sleep 120
|
||||
done
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
TESTBED_HW=ecw5410
|
||||
TESTBED_NAME=NOLA-15
|
||||
|
||||
# Controller's view of the test bed, from wlan-testing/cicd/[testbed] directory
|
||||
TESTBED_DIR=../../testbeds/nola-basic-15
|
||||
|
||||
#TESTBED_CASEID_FAST=C1308
|
||||
#TESTBED_CASEID_BASIC=C1309
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
while true
|
||||
do
|
||||
../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read --url http://orch/tip/testbeds/nola-basic-15/pending_work/ --dut_passwd openwifi --dut_user root
|
||||
sleep 120
|
||||
done
|
||||
|
||||
@@ -1,525 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# Query test-bed orchestator URL to see if there are new tests for us to run.
|
||||
# This is expected to be run on the test-bed controller (not orchestrator)
|
||||
# One of these processes will run for each test bed controlled by the controller.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Getopt::Long;
|
||||
|
||||
my $user = "";
|
||||
my $passwd = "";
|
||||
my $jfrog_user = "cicd_user";
|
||||
my $jfrog_passwd = "";
|
||||
my $url = "";
|
||||
my $next_info = "__next_test.txt";
|
||||
my $help = 0;
|
||||
my $owt_log = "";
|
||||
my $dut_passwd = "";
|
||||
my $dut_user = "root";
|
||||
my $sysupgrade_n = 0;
|
||||
#my $prompt = "root\@OpenAp";
|
||||
my $prompt = "root\@Open"; # match OpenWrt and OpenAp-foo
|
||||
my $log = "";
|
||||
|
||||
my $usage = qq($0
|
||||
[--jfrog_user { jfrog user (default: cicd_user) }
|
||||
[--jfrog_passwd { jfrog password }
|
||||
[--user { for accessing URL }
|
||||
[--passwd { for accessing URL }
|
||||
[--dut_user { for accessing DUT }
|
||||
[--dut_passwd { for accessing DUT }
|
||||
[--url { test-orchestrator URL for this test bed }
|
||||
[--next_info { output text file containing info about the next test to process }
|
||||
[--sysupgrade-n { 0 | 1 } 1 means use the -n option when doing sysupgrade.
|
||||
[--log {location} For instance: --log stdout, for openwrt_ctl expect script.
|
||||
|
||||
Example:
|
||||
$0 --user to_user --passwd secret --jfrog_user tip-read --jfrog_passwd tip-read \\
|
||||
--url https://tip.cicd.mycloud.com/testbed-ferndale-01/ --dut_passwd owrt --dut_user root
|
||||
|
||||
# Use specific scenario file.
|
||||
SCENARIO_CFG_FILE=/home/lanforge/git/wlan-testing/testbeds/ferndale-basic-01/scenario_small.txt \\
|
||||
../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read \\
|
||||
--url http://192.168.100.195/tip/testbeds/ferndale-basic-01/pending_work/
|
||||
|
||||
);
|
||||
|
||||
GetOptions
|
||||
(
|
||||
'jfrog_user=s' => \$jfrog_user,
|
||||
'jfrog_passwd=s' => \$jfrog_passwd,
|
||||
'user=s' => \$user,
|
||||
'passwd=s' => \$passwd,
|
||||
'dut_passwd=s' => \$dut_passwd,
|
||||
'dut_user=s' => \$dut_user,
|
||||
'url=s' => \$url,
|
||||
'next_info=s' => \$next_info,
|
||||
'sysupgrade_n=i' => \$sysupgrade_n,
|
||||
'log=s' => \$log,
|
||||
'help|?' => \$help,
|
||||
) || (print($usage) && exit(1));
|
||||
|
||||
if ($help) {
|
||||
print($usage) && exit(0);
|
||||
}
|
||||
|
||||
if ($jfrog_passwd eq "") {
|
||||
print("ERROR: You must specify jfrog password.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ($user ne "" && $passwd eq "") {
|
||||
print("ERROR: You must specify a password if specifying a user.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ($log ne "") {
|
||||
$owt_log = "--log $log";
|
||||
}
|
||||
my $owt_args = " --prompt $prompt";
|
||||
|
||||
if ($dut_user ne "") {
|
||||
$owt_args .= " --user $dut_user";
|
||||
}
|
||||
|
||||
if ($dut_passwd ne "") {
|
||||
$owt_args .= " --passwd $dut_passwd";
|
||||
}
|
||||
|
||||
$owt_log .= $owt_args;
|
||||
|
||||
my $i;
|
||||
|
||||
my $cuser = "-u $user:$passwd";
|
||||
if ($user eq "") {
|
||||
$cuser = "";
|
||||
}
|
||||
|
||||
my $cmd = "curl $cuser $url";
|
||||
|
||||
print_note("Checking Test-Orchestrator for new work-items");
|
||||
my $listing = do_system($cmd);
|
||||
my @lines = split(/\n/, $listing);
|
||||
|
||||
# First, if any have 'fast' in them, they get precedence.
|
||||
for ($i = 0; $i<@lines; $i++) {
|
||||
my $ln = $lines[$i];
|
||||
chomp($ln);
|
||||
my $fast = 0;
|
||||
if ($ln =~ /href=\"(CICD_TEST-.*-fast)\">(.*)<\/a>\s+(.*)\s+\S+\s+\S+/) {
|
||||
$fast = 1;
|
||||
}
|
||||
elsif ($ln =~ /href=\"(CICD_TEST-.*-fast)\">(.*)<\/a>/) {
|
||||
$fast = 1;
|
||||
}
|
||||
if ($fast) {
|
||||
@lines[0] = $ln;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
for ($i = 0; $i<@lines; $i++) {
|
||||
my $ln = $lines[$i];
|
||||
chomp($ln);
|
||||
|
||||
my $fname = "";
|
||||
my $name = "";
|
||||
my $date = "";
|
||||
|
||||
if ($ln =~ /href=\"(CICD_TEST-.*)\">(.*)<\/a>\s+(.*)\s+\S+\s+\S+/) {
|
||||
$fname = $1;
|
||||
$name = $2;
|
||||
$date = $3;
|
||||
}
|
||||
elsif ($ln =~ /href=\"(CICD_TEST-.*)\">(.*)<\/a>/) {
|
||||
$fname = $1;
|
||||
}
|
||||
|
||||
if ($fname ne "") {
|
||||
# Grab that test file
|
||||
$cmd = "curl --location $cuser -o $next_info $url/$fname";
|
||||
do_system($cmd);
|
||||
|
||||
# Read in that file
|
||||
my $jurl = "";
|
||||
my $jfile = "";
|
||||
my $report_to = "";
|
||||
my $report_name = "";
|
||||
my $swver = "";
|
||||
my $fdate = "";
|
||||
my $ttype = "";
|
||||
my $listing = do_system("cat $next_info");
|
||||
my @lines = split(/\n/, $listing);
|
||||
for ($i = 0; $i<@lines; $i++) {
|
||||
my $ln = $lines[$i];
|
||||
chomp($ln);
|
||||
if ($ln =~ /^CICD_URL=(.*)/) {
|
||||
$jurl = $1;
|
||||
}
|
||||
elsif ($ln =~ /^CICD_TYPE=(.*)/) {
|
||||
$ttype = $1;
|
||||
}
|
||||
elsif ($ln =~ /^CICD_FILE_NAME=(.*)/) {
|
||||
$jfile = $1;
|
||||
}
|
||||
elsif ($ln =~ /^CICD_RPT_DIR=(.*)/) {
|
||||
$report_to = $1;
|
||||
}
|
||||
elsif ($ln =~ /^CICD_RPT_NAME=(.*)/) {
|
||||
$report_name = $1;
|
||||
}
|
||||
elsif ($ln =~ /^CICD_GITHASH=(.*)/) {
|
||||
$swver = $1;
|
||||
}
|
||||
elsif ($ln =~ /^CICD_FILEDATE=(.*)/) {
|
||||
$fdate = $1;
|
||||
}
|
||||
}
|
||||
|
||||
if ($swver eq "") {
|
||||
$swver = $fdate;
|
||||
}
|
||||
|
||||
if ($swver eq "") {
|
||||
$swver = "$jfile";
|
||||
}
|
||||
|
||||
if ($jurl eq "") {
|
||||
print("ERROR: No CICD_URL found, cannot download file.\n");
|
||||
exit(1);
|
||||
}
|
||||
if ($jfile eq "") {
|
||||
print("ERROR: No CICD_FILE_NAME found, cannot download file.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
# Refresh wlan-ap repo if it exists.
|
||||
if ( -d "../../../wlan-ap") {
|
||||
do_system("cd ../../../wlan-ap && git pull && cd -");
|
||||
}
|
||||
|
||||
print_note("Download latest AP Build from jfrog repository.");
|
||||
my $cmd = "curl --location -o $jfile -u $jfrog_user:$jfrog_passwd $jurl/$jfile";
|
||||
do_system($cmd);
|
||||
|
||||
do_system("rm -f openwrt-*.bin");
|
||||
do_system("rm -f *sysupgrade.*"); # just in case openwrt prefix changes.
|
||||
do_system("tar xf $jfile");
|
||||
|
||||
# Detect if we are using full pkg or new trimmed sysupgrade image
|
||||
my $full_owrt_pkg = 0;
|
||||
my @listing = glob("*sysupgrade*");
|
||||
if (@listing > 0) {
|
||||
print("NOTE: Found full openwrt package.\n");
|
||||
$full_owrt_pkg = 1;
|
||||
}
|
||||
else {
|
||||
print("NOTE: Found trimmed sysupgrade openwrt package.\n");
|
||||
}
|
||||
|
||||
print_note("Copy AP build to LANforge so LANforge can serve the file to AP");
|
||||
# Next steps here are to put the OpenWrt file on the LANforge system
|
||||
my $tb_info = do_system("cat TESTBED_INFO.txt");
|
||||
my $tb_dir = "";
|
||||
if ($tb_info =~ /TESTBED_DIR=(.*)/) {
|
||||
$tb_dir = $1;
|
||||
}
|
||||
|
||||
my $env = do_system(". $tb_dir/test_bed_cfg.bash && env");
|
||||
my $lfmgr = "";
|
||||
my $serial = "";
|
||||
my $cloud_sdk = "";
|
||||
|
||||
if ($env =~ /LFMANAGER=(.*)/) {
|
||||
$lfmgr = $1;
|
||||
}
|
||||
else {
|
||||
print("ERRROR: Could not find LFMANAGER in environment, configuration error!\n");
|
||||
print("env: $env\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ($env =~ /USE_CLOUD_SDK=(\S+)/) {
|
||||
$cloud_sdk = $1;
|
||||
print("NOTE: Using cloud controller: $cloud_sdk\n");
|
||||
}
|
||||
else {
|
||||
print("NOTE: NOT Using cloud controller\n");
|
||||
}
|
||||
#print("env: $env");
|
||||
#exit(0);
|
||||
|
||||
if ($env =~ /AP_SERIAL=(.*)/) {
|
||||
$serial = $1;
|
||||
}
|
||||
else {
|
||||
print("ERRROR: Could not find AP_SERIAL in environment, configuration error!\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
my $gmport = "3990";
|
||||
my $gmanager = $lfmgr;
|
||||
my $scenario = "tip-auto"; # matches basic_regression.bash
|
||||
|
||||
if ($env =~ /GMANAGER=(.*)/) {
|
||||
$gmanager = $1;
|
||||
}
|
||||
if ($env =~ /GMPORT=(.*)/) {
|
||||
$gmport = $1;
|
||||
}
|
||||
|
||||
print_note("Restart LANforge GUI to be sure it is in known state.");
|
||||
# Restart the GUI on the LANforge system
|
||||
do_system("ssh lanforge\@$lfmgr pkill -f \"miglayout.*8080\"");
|
||||
|
||||
# and then get it onto the DUT, reboot DUT, re-configure as needed,
|
||||
print_note("Request AP DUT to install the test image.");
|
||||
if ($full_owrt_pkg) {
|
||||
do_system("scp *sysupgrade.* lanforge\@$lfmgr:tip-$jfile");
|
||||
}
|
||||
else {
|
||||
do_system("scp $jfile lanforge\@$lfmgr:tip-$jfile");
|
||||
}
|
||||
|
||||
|
||||
# TODO: Kill anything using the serial port
|
||||
do_system("sudo lsof -t $serial | sudo xargs --no-run-if-empty kill -9");
|
||||
|
||||
print_note("Find AP DUT default gateway.");
|
||||
# and then kick off automated regression test.
|
||||
# Default gateway on the AP should be one of the ports on the LANforge system, so we can use
|
||||
# that to scp the file to the DUT, via serial-console connection this controller has to the DUT.
|
||||
my $ap_route = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action cmd --value \"ip route show\"");
|
||||
my $ap_gw = "";
|
||||
if ($ap_route =~ /default via (\S+)/) {
|
||||
$ap_gw = $1;
|
||||
}
|
||||
if ($ap_gw eq "") {
|
||||
print("ERROR: Could not find default gateway for AP, route info:\n$ap_route\n");
|
||||
if ($ap_route =~ /pexpect.exceptions.TIMEOUT/) {
|
||||
# In case AP went into boot-loader, deal with that.
|
||||
if ($ap_route =~ /\(IPQ\)/) {
|
||||
print("WARNING: Detected Bootloader, will attempt to reset and recover.\n");
|
||||
do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py --prompt \"(IPQ)\" --scheme serial --tty $serial --action cmd --value \"reset\"");
|
||||
sleep(20);
|
||||
$ap_route = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action cmd --value \"ip route show\"");
|
||||
if ($ap_route =~ /default via (\S+)/) {
|
||||
$ap_gw = $1;
|
||||
}
|
||||
if ($ap_gw eq "") {
|
||||
if ($ap_route =~ /pexpect.exceptions.TIMEOUT/) {
|
||||
print("FATAL-ERROR: DUT is in bad state, bail out (find default GW, after bootloader reset).\n");
|
||||
exit(55);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
print("FATAL-ERROR: DUT is in bad state, bail out (find default GW).\n");
|
||||
exit(33);
|
||||
}
|
||||
}
|
||||
# Re-apply scenario so the LANforge gateway/NAT is enabled for sure.
|
||||
my $out = do_system("../../lanforge/lanforge-scripts/lf_gui_cmd.pl --manager $gmanager --port $gmport --scenario $scenario");
|
||||
# TODO: Use power-controller to reboot the AP and retry.
|
||||
if ($out =~ /pexpect.exceptions.TIMEOUT/) {
|
||||
print("FATAL-ERROR: DUT is in bad state, bail out.\n");
|
||||
exit(34);
|
||||
}
|
||||
|
||||
$out = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action reboot");
|
||||
print ("Reboot DUT to try to recover networking:\n$out\n");
|
||||
if ($out =~ /pexpect.exceptions.TIMEOUT/) {
|
||||
print("FATAL-ERROR: DUT is in bad state, bail out.\n");
|
||||
exit(35);
|
||||
}
|
||||
sleep(15);
|
||||
|
||||
$ap_route = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action cmd --value \"ip route show\"");
|
||||
if ($ap_route =~ /default via (\S+)/g) {
|
||||
$ap_gw = $1;
|
||||
}
|
||||
if ($ap_route =~ /pexpect.exceptions.TIMEOUT/) {
|
||||
print("FATAL-ERROR: DUT is in bad state, bail out.\n");
|
||||
exit(36);
|
||||
}
|
||||
if ($ap_gw eq "") {
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
print_note("Request AP DUT to install the test image and reboot.");
|
||||
# TODO: Change this to curl download??
|
||||
my $ap_out;
|
||||
if ($sysupgrade_n) {
|
||||
$ap_out = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action sysupgrade-n --value \"lanforge\@$ap_gw:tip-$jfile\"");
|
||||
}
|
||||
else {
|
||||
$ap_out = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action sysupgrade --value \"lanforge\@$ap_gw:tip-$jfile\"");
|
||||
}
|
||||
print ("Sys-upgrade results:\n$ap_out\n");
|
||||
if ($ap_out =~ /pexpect.exceptions.TIMEOUT/) {
|
||||
print("FATAL-ERROR: DUT is in bad state, bail out.\n");
|
||||
exit(37);
|
||||
}
|
||||
# TODO: Verify this (and reboot below) worked. DUT can get wedged and in that case it will need
|
||||
# a power-cycle to continue.
|
||||
|
||||
# System should be rebooted at this point.
|
||||
sleep(10); # Give it some more time
|
||||
|
||||
if ($cloud_sdk eq "") {
|
||||
print_note("Initialize AP, disable OpenVsync since this is stand-alone testbed.");
|
||||
# Disable openvsync, it will re-write /etc/config/wireless
|
||||
# This code should not be used when we get cloud-sdk wired up.
|
||||
$ap_out = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action cmd --value \"service opensync stop\"");
|
||||
print ("Stop openvsync:\n$ap_out\n");
|
||||
if ($ap_out =~ /pexpect.exceptions.TIMEOUT/) {
|
||||
print("FATAL-ERROR: DUT is in bad state, bail out.\n");
|
||||
exit(38);
|
||||
}
|
||||
$ap_out = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action cmd --value \"service opensync disable\"");
|
||||
print ("Disable openvsync:\n$ap_out\n");
|
||||
if ($ap_out =~ /pexpect.exceptions.TIMEOUT/) {
|
||||
print("FATAL-ERROR: DUT is in bad state, bail out.\n");
|
||||
exit(39);
|
||||
}
|
||||
}
|
||||
else {
|
||||
print_note("Initialize AP, enable OpenVsync since this testbed is using Cloud-Controler: $cloud_sdk.");
|
||||
$ap_out = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action cmd --value \"service opensync enable\"");
|
||||
print ("Enable openvsync:\n$ap_out\n");
|
||||
if ($ap_out =~ /pexpect.exceptions.TIMEOUT/) {
|
||||
print("FATAL-ERROR: DUT is in bad state, bail out.\n");
|
||||
exit(40);
|
||||
}
|
||||
}
|
||||
|
||||
# Enable bugcheck script
|
||||
my $etc_bugcheck = "$tb_dir/OpenWrt-overlay/etc/config/bugcheck";
|
||||
open(FILE, ">", "$etc_bugcheck");
|
||||
print FILE "DO_BUGCHECK=1
|
||||
export DO_BUGCHECK
|
||||
";
|
||||
close(FILE);
|
||||
|
||||
# Re-apply overlay
|
||||
print_note("Apply default AP configuration for this test bed.");
|
||||
if ($cloud_sdk eq "") {
|
||||
$ap_out = do_system("cd $tb_dir/OpenWrt-overlay && tar -cvzf ../overlay_tmp.tar.gz * && scp ../overlay_tmp.tar.gz lanforge\@$lfmgr:tip-overlay.tar.gz");
|
||||
}
|
||||
else {
|
||||
# Create /etc/hosts file that points us towards correct cloud-sdk machine
|
||||
my $etc_hosts = "$tb_dir/OpenWrt-overlay/etc/hosts";
|
||||
open(FILE, ">", "$etc_hosts");
|
||||
print FILE "# Auto-Created by CICD process
|
||||
127.0.0.1 localhost
|
||||
|
||||
::1 localhost ip6-localhost ip6-loopback
|
||||
ff02::1 ip6-allnodes
|
||||
ff02::2 ip6-allrouters
|
||||
$cloud_sdk opensync-mqtt-broker
|
||||
$cloud_sdk opensync-wifi-controller
|
||||
$cloud_sdk opensync.zone1.art2wave.com
|
||||
";
|
||||
|
||||
# Leave 'wireless' out of the overlay since opensync will be designed to work with default config.
|
||||
$ap_out = do_system("cd $tb_dir/OpenWrt-overlay && tar -cvzf ../overlay_tmp.tar.gz --exclude etc/config/wireless * && scp ../overlay_tmp.tar.gz lanforge\@$lfmgr:tip-overlay.tar.gz");
|
||||
unlink($etc_hosts);
|
||||
close(FILE);
|
||||
}
|
||||
|
||||
|
||||
print ("Copy overlay to DUT\n");
|
||||
|
||||
for (my $q = 0; $q<10; $q++) {
|
||||
$ap_out = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action download --value \"lanforge\@$ap_gw:tip-overlay.tar.gz\" --value2 \"overlay.tgz\"");
|
||||
print ("Download overlay to DUT:\n$ap_out\n");
|
||||
if ($ap_out =~ /ERROR: Could not connect to LANforge/g) {
|
||||
# Try to restart the network
|
||||
$ap_out = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action cmd --value \"/etc/init.d/network restart\"");
|
||||
print ("Request restart of DUT networking:\n$ap_out\n");
|
||||
if ($q == 9) {
|
||||
# We have failed to apply overlay at this point, bail out.
|
||||
print("ERROR: Could not apply overlay to DUT, exiting test attempt.\n");
|
||||
exit(1);
|
||||
}
|
||||
print("Will retry overlay download in 10 seconds, try $q / 10\n");
|
||||
sleep(10);
|
||||
}
|
||||
else {
|
||||
last;
|
||||
}
|
||||
}
|
||||
$ap_out = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action cmd --value \"cd / && tar -xzf /tmp/overlay.tgz\"");
|
||||
print ("Un-zip overlay on DUT:\n$ap_out\n");
|
||||
if ($ap_out =~ /pexpect.exceptions.TIMEOUT/) {
|
||||
print("FATAL-ERROR: DUT is in bad state, bail out.\n");
|
||||
exit(41);
|
||||
}
|
||||
|
||||
print_note("Reboot AP so that new configuration is applied.");
|
||||
$ap_out = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action reboot");
|
||||
print ("Rebooted DUT so overlay takes effect:\n$ap_out\n");
|
||||
if ($ap_out =~ /pexpect.exceptions.TIMEOUT/) {
|
||||
print("FATAL-ERROR: DUT is in bad state, bail out.\n");
|
||||
exit(42);
|
||||
}
|
||||
|
||||
my $dt = `date`;
|
||||
print_note("$dt");
|
||||
|
||||
if ($ttype eq "fast") {
|
||||
print_note("Start 'Fast' LANforge regression test.");
|
||||
$ap_out = do_system("cd $tb_dir && APGW=$ap_gw DUT_SW_VER=$swver OWRTCTL_ARGS=\"$owt_args\" ./run_basic_fast.bash");
|
||||
}
|
||||
else {
|
||||
print_note("Start 'Fast' LANforge regression test.");
|
||||
$ap_out = do_system("cd $tb_dir && APGW=$ap_gw DUT_SW_VER=$swver OWRTCTL_ARGS=\"$owt_args\" ./run_basic.bash");
|
||||
}
|
||||
print("Regression $ttype test script output:\n$ap_out\n");
|
||||
|
||||
print_note("Upload results.");
|
||||
|
||||
#When complete, upload the results to the requested location.
|
||||
if ($ap_out =~ /Results-Dir: (.*)/) {
|
||||
my $rslts_dir = $1;
|
||||
if ($rslts_dir =~ /(.*)\'/) {
|
||||
$rslts_dir = $1;
|
||||
}
|
||||
print ("Found results at: $rslts_dir\n");
|
||||
do_system("rm -fr /tmp/$report_name");
|
||||
do_system("mv $rslts_dir /tmp/$report_name");
|
||||
do_system("chmod -R a+r /tmp/$report_name");
|
||||
do_system("scp -C -r /tmp/$report_name $report_to/");
|
||||
do_system("echo $fname > /tmp/NEW_RESULTS-$fname");
|
||||
do_system("scp /tmp/NEW_RESULTS-$fname $report_to/");
|
||||
|
||||
# This will indirectly stop logread if it is running.
|
||||
$ap_out = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action cmd --value \"uptime\"");
|
||||
if ($ap_out =~ /pexpect.exceptions.TIMEOUT/) {
|
||||
print("FATAL-ERROR: DUT is in bad state, bail out.\n");
|
||||
exit(43);
|
||||
}
|
||||
}
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
#print "$ln\n";
|
||||
}
|
||||
|
||||
exit 0;
|
||||
|
||||
sub do_system {
|
||||
my $cmd = shift;
|
||||
print ">>> $cmd\n";
|
||||
return `$cmd 2>&1`;
|
||||
}
|
||||
|
||||
sub print_note {
|
||||
my $n = shift;
|
||||
my $hdr = "###############################################################";
|
||||
print "\n\n\n$hdr\n### $n\n$hdr\n\n";
|
||||
}
|
||||
@@ -3,14 +3,15 @@ import paramiko
|
||||
|
||||
class APNOS:
|
||||
|
||||
def __init__(self, jumphost_cred=None):
|
||||
def __init__(self, credentials=None):
|
||||
self.owrt_args = "--prompt root@OpenAp -s serial --log stdout --user root --passwd openwifi"
|
||||
if jumphost_cred is None:
|
||||
if credentials is None:
|
||||
exit()
|
||||
self.jumphost_ip = jumphost_cred['jumphost_ip'] # "192.168.200.80"
|
||||
self.jumphost_username = jumphost_cred['jumphost_username'] # "lanforge"
|
||||
self.jumphost_password = jumphost_cred['jumphost_password'] # "lanforge"
|
||||
self.jumphost_port = jumphost_cred['jumphost_port'] # 22
|
||||
self.jumphost_ip = credentials['ip'] # "192.168.200.80"
|
||||
self.jumphost_username = credentials['username'] # "lanforge"
|
||||
self.jumphost_password = credentials['password'] # "lanforge"
|
||||
self.jumphost_port = credentials['port'] # 22
|
||||
self.mode = credentials['mode'] # 1 for jumphost, 0 for direct ssh
|
||||
|
||||
def ssh_cli_connect(self):
|
||||
client = paramiko.SSHClient()
|
||||
@@ -24,8 +25,11 @@ class APNOS:
|
||||
|
||||
def iwinfo_status(self):
|
||||
client = self.ssh_cli_connect()
|
||||
cmd = "cd %s/lanforge/lanforge-scripts/ && ./openwrt_ctl.py %s -t %s --action cmd --value \"%s\"" % (
|
||||
'/home', self.owrt_args, '/dev/ttyAP1', 'iwinfo')
|
||||
if self.mode == 1:
|
||||
cmd = "cd %s/lanforge/lanforge-scripts/ && ./openwrt_ctl.py %s -t %s --action cmd --value \"%s\"" % (
|
||||
'/home', self.owrt_args, '/dev/ttyAP1', 'iwinfo')
|
||||
else:
|
||||
cmd = 'iwinfo'
|
||||
stdin, stdout, stderr = client.exec_command(cmd)
|
||||
output = stdout.read()
|
||||
client.close()
|
||||
@@ -33,8 +37,11 @@ class APNOS:
|
||||
|
||||
def get_vif_config(self):
|
||||
client = self.ssh_cli_connect()
|
||||
cmd = "cd %s/lanforge/lanforge-scripts/ && ./openwrt_ctl.py %s -t %s --action cmd --value \"%s\"" % (
|
||||
'/home', self.owrt_args, '/dev/ttyAP1', "/usr/opensync/bin/ovsh s Wifi_VIF_Config -c")
|
||||
if self.mode == 1:
|
||||
cmd = "cd %s/lanforge/lanforge-scripts/ && ./openwrt_ctl.py %s -t %s --action cmd --value \"%s\"" % (
|
||||
'/home', self.owrt_args, '/dev/ttyAP1', "/usr/opensync/bin/ovsh s Wifi_VIF_Config -c")
|
||||
else:
|
||||
cmd = "/usr/opensync/bin/ovsh s Wifi_VIF_Config -c"
|
||||
stdin, stdout, stderr = client.exec_command(cmd)
|
||||
output = stdout.read()
|
||||
client.close()
|
||||
@@ -42,8 +49,11 @@ class APNOS:
|
||||
|
||||
def get_vif_state(self):
|
||||
client = self.ssh_cli_connect()
|
||||
cmd = "cd %s/lanforge/lanforge-scripts/ && ./openwrt_ctl.py %s -t %s --action cmd --value \"%s\"" % (
|
||||
'/home', self.owrt_args, '/dev/ttyAP1', "/usr/opensync/bin/ovsh s Wifi_VIF_State -c")
|
||||
if self.mode == 1:
|
||||
cmd = "cd %s/lanforge/lanforge-scripts/ && ./openwrt_ctl.py %s -t %s --action cmd --value \"%s\"" % (
|
||||
'/home', self.owrt_args, '/dev/ttyAP1', "/usr/opensync/bin/ovsh s Wifi_VIF_State -c")
|
||||
else:
|
||||
cmd = "/usr/opensync/bin/ovsh s Wifi_VIF_State -c"
|
||||
stdin, stdout, stderr = client.exec_command(cmd)
|
||||
output = stdout.read()
|
||||
client.close()
|
||||
@@ -70,8 +80,11 @@ class APNOS:
|
||||
def get_active_firmware(self):
|
||||
try:
|
||||
client = self.ssh_cli_connect()
|
||||
cmd = "cd %s/lanforge/lanforge-scripts/ && ./openwrt_ctl.py %s -t %s --action cmd --value \"%s\"" % (
|
||||
'/home', self.owrt_args, '/dev/ttyAP1', '/usr/opensync/bin/ovsh s AWLAN_Node -c | grep FW_IMAGE_ACTIVE')
|
||||
if self.mode == 1:
|
||||
cmd = "cd %s/lanforge/lanforge-scripts/ && ./openwrt_ctl.py %s -t %s --action cmd --value \"%s\"" % (
|
||||
'/home', self.owrt_args, '/dev/ttyAP1', '/usr/opensync/bin/ovsh s AWLAN_Node -c | grep FW_IMAGE_ACTIVE')
|
||||
else:
|
||||
cmd = '/usr/opensync/bin/ovsh s AWLAN_Node -c | grep FW_IMAGE_ACTIVE'
|
||||
stdin, stdout, stderr = client.exec_command(cmd)
|
||||
output = stdout.read()
|
||||
# print(output)
|
||||
@@ -86,8 +99,11 @@ class APNOS:
|
||||
def get_manager_state(self):
|
||||
try:
|
||||
client = self.ssh_cli_connect()
|
||||
cmd = "cd %s/lanforge/lanforge-scripts/ && ./openwrt_ctl.py %s -t %s --action cmd --value \"%s\"" % (
|
||||
'/home', self.owrt_args, '/dev/ttyAP1', '/usr/opensync/bin/ovsh s Manager -c | grep status')
|
||||
if self.mode == 1:
|
||||
cmd = "cd %s/lanforge/lanforge-scripts/ && ./openwrt_ctl.py %s -t %s --action cmd --value \"%s\"" % (
|
||||
'/home', self.owrt_args, '/dev/ttyAP1', '/usr/opensync/bin/ovsh s Manager -c | grep status')
|
||||
else:
|
||||
cmd = '/usr/opensync/bin/ovsh s Manager -c | grep status'
|
||||
stdin, stdout, stderr = client.exec_command(cmd)
|
||||
output = stdout.read()
|
||||
status = str(output.decode('utf-8').splitlines())
|
||||
@@ -98,8 +114,11 @@ class APNOS:
|
||||
|
||||
def get_status(self):
|
||||
client = self.ssh_cli_connect()
|
||||
cmd = "cd %s/lanforge/lanforge-scripts/ && ./openwrt_ctl.py %s -t %s --action cmd --value \"%s\"" % (
|
||||
'/home', self.owrt_args, '/dev/ttyAP1', "/usr/opensync/bin/ovsh s Wifi_VIF_State -c")
|
||||
if self.mode == 1:
|
||||
cmd = "cd %s/lanforge/lanforge-scripts/ && ./openwrt_ctl.py %s -t %s --action cmd --value \"%s\"" % (
|
||||
'/home', self.owrt_args, '/dev/ttyAP1', "/usr/opensync/bin/ovsh s Wifi_VIF_State -c")
|
||||
else:
|
||||
cmd = "/usr/opensync/bin/ovsh s Wifi_VIF_State -c"
|
||||
stdin, stdout, stderr = client.exec_command(cmd)
|
||||
output = stdout.read()
|
||||
client.close()
|
||||
@@ -111,7 +130,9 @@ class APNOS:
|
||||
# 'jumphost_username': "lanforge",
|
||||
# 'jumphost_password': "lanforge",
|
||||
# 'jumphost_port': 22
|
||||
# 'mode': 1
|
||||
# }
|
||||
# mode can me 1 for ap direct ssh, and 0 for jumphost
|
||||
# obj = APNOS(jumphost_cred=APNOS_CREDENTIAL_DATA)
|
||||
# print(obj.get_active_firmware())
|
||||
# print(obj.get_vif_config_ssids())
|
||||
|
||||
@@ -765,76 +765,3 @@ class FirmwareUtility(JFrogUtility):
|
||||
print("firmware not available: ", firmware_version)
|
||||
return firmware_version
|
||||
|
||||
# sdk_client = CloudSDK(testbed="https://wlan-portal-svc-nola-ext-03.cicd.lab.wlan.tip.build", customer_id=2)
|
||||
# print(sdk_client.get_ssid_profiles_from_equipment_profile(profile_id=1256))
|
||||
# sdk_client.disconnect_cloudsdk()
|
||||
# sdk_client = CloudSDK(testbed="https://wlan-portal-svc-nola-ext-03.cicd.lab.wlan.tip.build", customer_id=2)
|
||||
# profile_obj = ProfileUtility(sdk_client=sdk_client)
|
||||
# profile_data = {'profile_name': 'Sanity-ecw5410-2G_WPA2_E_BRIDGE', 'ssid_name': 'Sanity-ecw5410-2G_WPA2_E_BRIDGE', 'vlan': 1, 'mode': 'BRIDGE', 'security_key': '2G-WPA2_E_BRIDGE'}
|
||||
# profile_obj.get_default_profiles()
|
||||
# radius_info = {
|
||||
# "name" : "something",
|
||||
# "ip": "192.168.200.75",
|
||||
# "port": 1812,
|
||||
# "secret": "testing123"
|
||||
#
|
||||
# }
|
||||
# profile_obj.create_radius_profile(radius_info=radius_info)
|
||||
# profile_obj.create_wpa2_enterprise_ssid_profile(profile_data=profile_data, fiveg=False)
|
||||
# # # profile_obj.delete_profile_by_name(profile_name="Test_Delete")
|
||||
# sdk_client.disconnect_cloudsdk()
|
||||
# # #
|
||||
# sdk_client = CloudSDK(testbed="nola-ext-03", customer_id=2)
|
||||
# sdk_client.get_ap_firmware_old_method(equipment_id=23)
|
||||
# sdk_client.disconnect_cloudsdk()
|
||||
|
||||
# sdk_client = CloudSDK(testbed="nola-ext-03", customer_id=2)
|
||||
# profile_obj = ProfileUtility(sdk_client=sdk_client)
|
||||
# profile_obj.get_default_profiles()
|
||||
# profile_obj.set_rf_profile()
|
||||
# # print(profile_obj.default_profiles["ssid"]._id)
|
||||
# # profile_obj.get_profile_by_id(profile_id=profile_obj.default_profiles["ssid"]._id)
|
||||
# #
|
||||
# # print(profile_obj.default_profiles)default_profiles
|
||||
# radius_info = {
|
||||
# "name": "nola-ext-03" + "-RADIUS-Sanity",
|
||||
# "ip": "192.168.200.75",
|
||||
# "port": 1812,
|
||||
# "secret": "testing123"
|
||||
# }
|
||||
# profile_obj.create_radius_profile(radius_info=radius_info)
|
||||
# profile_data = {
|
||||
# "profile_name": "NOLA-ext-03-WPA2-Enterprise-2G",
|
||||
# "ssid_name": "NOLA-ext-03-WPA2-Enterprise-2G",
|
||||
# "vlan": 1,
|
||||
# "mode": "BRIDGE"
|
||||
# }
|
||||
# profile_obj.create_wpa2_enterprise_ssid_profile(profile_data=profile_data)
|
||||
# profile_data = {
|
||||
# "profile_name": "%s-%s-%s" % ("Nola-ext-03", "ecw5410", 'Bridge')
|
||||
# }
|
||||
# profile_obj.set_ap_profile(profile_data=profile_data)
|
||||
# profile_obj.push_profile_old_method(equipment_id=23)
|
||||
# sdk_client.disconnect_cloudsdk()
|
||||
#
|
||||
# # from testbed_info import JFROG_CREDENTIALS
|
||||
# #
|
||||
# JFROG_CREDENTIALS = {
|
||||
# "user": "tip-read",
|
||||
# "password": "tip-read"
|
||||
# }
|
||||
# sdk_client = CloudSDK(testbed="nola-ext-03", customer_id=2)
|
||||
# obj = FirmwareUtility(jfrog_credentials=JFROG_CREDENTIALS, sdk_client=sdk_client)
|
||||
# obj.upgrade_fw(equipment_id=23, force_upload=False, force_upgrade=False)
|
||||
# sdk_client.disconnect_cloudsdk()
|
||||
"""
|
||||
Check the ap model
|
||||
Check latest revision of a model
|
||||
Check the firmware version on AP
|
||||
Check if latest version is available on cloud
|
||||
if not:
|
||||
Upload to cloud
|
||||
if yes:
|
||||
continue
|
||||
Upgrade the Firmware on AP
|
||||
"""
|
||||
|
||||
7
libs/testrails/reporting.py
Normal file
7
libs/testrails/reporting.py
Normal file
@@ -0,0 +1,7 @@
|
||||
class Reporting:
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def update_testrail(self, case_id=None, run_id=None, status_id=1, msg=None):
|
||||
pass
|
||||
@@ -1,23 +0,0 @@
|
||||
This automation assumes that the AP is configured as pass-through AP, not
|
||||
router:
|
||||
|
||||
# Until cloud-sdk is integrated, stop opensync so we can do local config
|
||||
service opensync stop
|
||||
service opensync disable
|
||||
|
||||
# Configure /etc/config/network to bridge eth ports and wifi devices.
|
||||
|
||||
# Disable DHCP
|
||||
/etc/init.d/dnsmasq disable
|
||||
/etc/init.d/dnsmasq stop
|
||||
|
||||
# Disable DHCP v6
|
||||
/etc/init.d/odhcpd disable
|
||||
/etc/init.d/odhcpd stop
|
||||
|
||||
# Disable firewall ???
|
||||
/etc/init.d/firewall disable
|
||||
/etc/init.d/firewall stop
|
||||
|
||||
/etc/init.d/network reload
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
profile_link 1.1 STA-AC 64 'DUT: ecw5410 Radio-2' NA wiphy1,AUTO -1
|
||||
profile_link 1.1 STA-AC 178 'DUT: ecw5410 Radio-1' NA wiphy0,AUTO -1
|
||||
profile_link 1.1 upstream-dhcp 1 'DUT: ecw5410 LAN' NA eth2,AUTO -1
|
||||
profile_link 1.1 uplink-nat 1 'DUT: uplink LAN 192.168.3.5/24' NA eth3,eth2 -1
|
||||
dut uplink 323 37
|
||||
dut ecw5410 459 125
|
||||
resource 1.1 244 252
|
||||
|
||||
|
||||
@@ -1,100 +0,0 @@
|
||||
[BLANK]
|
||||
sel_port-0: 1.1.eth2
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 0
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 1
|
||||
skip_2: 1
|
||||
skip_5: 1
|
||||
dut5-0: ecw5410 OpenWrt-ecw-5
|
||||
dut2-0: ecw5410 OpenWrt-ecw-2
|
||||
dut5-1: NA
|
||||
dut2-1: NA
|
||||
dut5-2: NA
|
||||
dut2-2: NA
|
||||
spatial_streams: AUTO
|
||||
bandw_options: AUTO
|
||||
modes: Auto
|
||||
upstream_port: 1.1.1 eth2
|
||||
operator:
|
||||
mconn: 1
|
||||
tos: 0
|
||||
vid_buf: 1000000
|
||||
vid_speed: 700000
|
||||
reset_stall_thresh_udp_dl: 100000
|
||||
reset_stall_thresh_udp_ul: 100000
|
||||
reset_stall_thresh_tcp_dl: 100000
|
||||
reset_stall_thresh_tcp_ul: 100000
|
||||
reset_stall_thresh_l4: 100000
|
||||
reset_stall_thresh_voip: 20000
|
||||
stab_udp_dl_min: 500000
|
||||
stab_udp_dl_max: 0
|
||||
stab_udp_ul_min: 500000
|
||||
stab_udp_ul_max: 0
|
||||
stab_tcp_dl_min: 500000
|
||||
stab_tcp_dl_max: 0
|
||||
stab_tcp_ul_min: 500000
|
||||
stab_tcp_ul_max: 0
|
||||
dl_speed: 85%
|
||||
ul_speed: 85%
|
||||
max_stations_2: 178
|
||||
max_stations_5: 64
|
||||
max_stations_dual: 242
|
||||
lt_sta: 2
|
||||
voip_calls: 20
|
||||
lt_dur: 3600
|
||||
reset_dur: 3600
|
||||
lt_gi: 30
|
||||
dur20: 20
|
||||
hunt_retries: 1
|
||||
cap_dl: 1
|
||||
cap_ul: 0
|
||||
cap_use_pkt_sizes: 0
|
||||
stability_reset_radios: 0
|
||||
pkt_loss_thresh: 10000
|
||||
frame_sizes: 200, 512, 1024, MTU
|
||||
capacities: 1, 2, 5, 10, 20, 40, 64, 128, 256, 512, 1024, MAX
|
||||
radio2-0: 1.1.4 wiphy0
|
||||
radio5-0: 1.1.3 wiphy1
|
||||
basic_cx: 1
|
||||
tput: 0
|
||||
dual_band_tput: 0
|
||||
capacity: 0
|
||||
longterm: 0
|
||||
mix_stability: 0
|
||||
loop_iter: 1
|
||||
reset_batch_size: 1
|
||||
reset_duration_min: 10000
|
||||
reset_duration_max: 60000
|
||||
|
||||
# Configure pass/fail metrics for this testbed.
|
||||
pf_text0: 2.4 DL 200 60Mbps
|
||||
pf_text1: 2.4 DL 512 90Mbps
|
||||
pf_text2: 2.4 DL 1024 110Mbps
|
||||
pf_text3: 2.4 DL MTU 112Mbps
|
||||
pf_text4:
|
||||
pf_text5: 2.4 UL 200 60Mbps
|
||||
pf_text6: 2.4 UL 512 90Mbps
|
||||
pf_text7: 2.4 UL 1024 110Mbps
|
||||
pf_text8: 2.4 UL MTU 112Mbps
|
||||
pf_text9:
|
||||
pf_text10: 5 DL 200 72Mbps
|
||||
pf_text11: 5 DL 512 185Mbps
|
||||
pf_text12: 5 DL 1024 370Mbps
|
||||
pf_text13: 5 DL MTU 520Mbps
|
||||
pf_text14:
|
||||
pf_text15: 5 UL 200 85Mbps
|
||||
pf_text16: 5 UL 512 220Mbps
|
||||
pf_text17: 5 UL 1024 430Mbps
|
||||
pf_text18: 5 UL MTU 600Mbps
|
||||
|
||||
# Tune connect-time thresholds.
|
||||
cx_prcnt: 950000
|
||||
cx_open_thresh: 35
|
||||
cx_psk_thresh: 75
|
||||
cx_1x_thresh: 130
|
||||
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
|
||||
DUT is an ECW5410 running TIP OpenWrt.
|
||||
This uses ath10k-ct firmware, and by default, the ath10k driver only supports 32 stations per
|
||||
radio. To improve this, I tweaked the setup using the fwcfg files.
|
||||
The radios also only work on certain frequencies, so one has to configure them
|
||||
carefully.
|
||||
|
||||
See the OpenWrt-overlay directory for files that should be copied onto the DUT
|
||||
to work with this test. Once OpenSync cloud stuff is complete, the overlay may
|
||||
not be needed.
|
||||
@@ -1,33 +0,0 @@
|
||||
config interface 'loopback'
|
||||
option ifname 'lo'
|
||||
option proto 'static'
|
||||
option ipaddr '127.0.0.1'
|
||||
option netmask '255.0.0.0'
|
||||
|
||||
config globals 'globals'
|
||||
option ula_prefix 'fd05:d9f9:75c8::/48'
|
||||
|
||||
config interface 'lan'
|
||||
option type 'bridge'
|
||||
option ifname 'eth1 eth0'
|
||||
option proto 'dhcp'
|
||||
# option ipaddr '192.168.1.1'
|
||||
# option netmask '255.255.255.0'
|
||||
# option ip6assign '60'
|
||||
|
||||
config device 'lan_eth1_dev'
|
||||
option name 'eth1'
|
||||
option macaddr '3c:2c:99:f4:51:73'
|
||||
|
||||
#config interface 'wan'
|
||||
# option ifname 'eth0'
|
||||
# option proto 'dhcp'
|
||||
|
||||
config device 'wan_eth0_dev'
|
||||
option name 'eth0'
|
||||
option macaddr '3c:2c:99:f4:51:72'
|
||||
|
||||
config interface 'wan6'
|
||||
option ifname 'eth0'
|
||||
option proto 'dhcpv6'
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
config wifi-device 'radio0'
|
||||
option type 'mac80211'
|
||||
option channel '36'
|
||||
option hwmode '11a'
|
||||
option path 'soc/1b700000.pci/pci0001:00/0001:00:00.0/0001:01:00.0'
|
||||
option htmode 'VHT80'
|
||||
option disabled '0'
|
||||
|
||||
config wifi-iface 'default_radio0'
|
||||
option device 'radio0'
|
||||
option network 'lan'
|
||||
option mode 'ap'
|
||||
option ssid 'OpenWrt-ecw-5'
|
||||
option encryption 'none'
|
||||
|
||||
config wifi-device 'radio1'
|
||||
option type 'mac80211'
|
||||
option channel '11'
|
||||
option hwmode '11g'
|
||||
option path 'soc/1b900000.pci/pci0002:00/0002:00:00.0/0002:01:00.0'
|
||||
option htmode 'HT20'
|
||||
option disabled '0'
|
||||
|
||||
config wifi-iface 'default_radio1'
|
||||
option device 'radio1'
|
||||
option network 'lan'
|
||||
option mode 'ap'
|
||||
option ssid 'OpenWrt-ecw-2'
|
||||
option encryption 'none'
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
[BLANK]
|
||||
sel_port-0: 1.1.eth2
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 0
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 0
|
||||
skip_2: 0
|
||||
skip_5: 0
|
||||
selected_dut: ecw5410
|
||||
duration: 15000
|
||||
traffic_port: 1.1.6 sta00000
|
||||
upstream_port: 1.1.1 eth2
|
||||
path_loss: 10
|
||||
speed: 85%
|
||||
speed2: 0Kbps
|
||||
min_rssi_bound: -150
|
||||
max_rssi_bound: 0
|
||||
channels: AUTO
|
||||
modes: Auto
|
||||
pkts: 60;142;256;512;1024;MTU;4000
|
||||
spatial_streams: AUTO
|
||||
security_options: AUTO
|
||||
bandw_options: AUTO
|
||||
traffic_types: UDP
|
||||
directions: DUT Transmit;DUT Receive
|
||||
txo_preamble: OFDM
|
||||
txo_mcs: 0 CCK, OFDM, HT, VHT
|
||||
txo_retries: No Retry
|
||||
txo_sgi: OFF
|
||||
txo_txpower: 15
|
||||
attenuator: 0
|
||||
attenuator2: 0
|
||||
attenuator_mod: 255
|
||||
attenuator_mod2: 255
|
||||
attenuations: 0..+50..950
|
||||
attenuations2: 0..+50..950
|
||||
chamber: 0
|
||||
tt_deg: 0..+45..359
|
||||
cust_pkt_sz:
|
||||
show_3s: 0
|
||||
show_ll_graphs: 0
|
||||
show_gp_graphs: 1
|
||||
show_1m: 1
|
||||
pause_iter: 0
|
||||
show_realtime: 1
|
||||
operator:
|
||||
mconn: 1
|
||||
mpkt: 1000
|
||||
tos: 0
|
||||
loop_iterations: 1
|
||||
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
# Seems ECW can lose its environment sometimes, here is a proper environment:
|
||||
# For whatever reason, I can only paste about two lines at a time...more and sometimes
|
||||
# the bootloader seems to silently crash.
|
||||
|
||||
setenv active '1'
|
||||
setenv altbootcmd 'if test $changed = 0; then run do_change; else run do_recovery; fi'
|
||||
setenv args_common 'root=mtd:ubi_rootfs rootfstype=squashfs'
|
||||
setenv boot1 'echo Booting from partition: ${partname}'
|
||||
setenv boot2 'nand device 1 && set mtdids nand0=nand0'
|
||||
setenv boot3 'set mtdparts mtdparts=nand0:0x4000000@0x0(fs1),0x4000000@0x4000000(fs2)'
|
||||
setenv boot4 'ubi part fs${partname} && ubi read 44000000 kernel'
|
||||
setenv boot5 'cfgsel 44000000 && run bootfdtcmd'
|
||||
setenv bootargs 'console=ttyHSL1,115200n8'
|
||||
setenv bootcmd 'run setup && run bootlinux'
|
||||
setenv bootdelay '2'
|
||||
setenv bootlimit '3'
|
||||
setenv bootlinux 'run boot1 boot2 boot3 boot4 boot5|| reset'
|
||||
setenv change1 'if test $active = 1; then setenv active 2; else setenv active 1; fi'
|
||||
setenv change2 'setenv bootcount; setenv changed 1; saveenv'
|
||||
setenv change3 'echo Active partition changed to [$active]'
|
||||
setenv do_change 'run change1 change2 change3; reset'
|
||||
setenv do_lub 'run lub1 lub2 lub3'
|
||||
setenv do_recovery 'run rec1 rec2 rec3 rec4 rec5 rec6 rec7 rec8; reset'
|
||||
setenv eth1addr '3c:2c:99:f4:51:63'
|
||||
setenv ethact 'eth0'
|
||||
setenv ethaddr '3c:2c:99:f4:51:62'
|
||||
setenv lub1 'tftpboot ${tftp_loadaddr} ${ub_file}'
|
||||
setenv lub2 'sf probe && sf erase 0x100000 0x70000'
|
||||
setenv lub3 'sf write ${tftp_loadaddr} 0x100000 ${filesize}'
|
||||
setenv machid '136b'
|
||||
setenv rec1 'echo Doing firmware recovery!'
|
||||
setenv rec2 'setenv active 1 && setenv changed 0 && setenv bootcount 0'
|
||||
setenv rec3 'saveenv'
|
||||
setenv rec4 'sleep 2 && tftpboot ${tftp_loadaddr} ${recovery_file}'
|
||||
setenv rec5 'imxtract ${tftp_loadaddr} ubi'
|
||||
setenv rec6 'nand device 1 && nand erase.chip'
|
||||
setenv rec7 'nand write ${fileaddr} 0x0 ${filesize}'
|
||||
setenv rec8 'nand write ${fileaddr} 0x4000000 ${filesize}'
|
||||
setenv recovery_file 'fwupdate.bin'
|
||||
setenv setup 'if test $active = 1; then run setup1; else run setup2; fi'
|
||||
setenv setup1 'partname=1 && setenv bootargs ubi.mtd=rootfs${partname} ${args_common}'
|
||||
setenv setup2 'partname=2 && setenv bootargs ubi.mtd=rootfs${partname} ${args_common}'
|
||||
setenv stderr 'serial'
|
||||
setenv stdin 'serial'
|
||||
setenv stdout 'serial'
|
||||
setenv tftp_loadaddr '0x42000000'
|
||||
setenv ub_file 'openwrt-ipq806x-u-boot.mbn'
|
||||
setenv upgrade_available '1'
|
||||
setenv bootcount '0'
|
||||
saveenv
|
||||
setenv baudrate '115200'
|
||||
@@ -1,72 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Example usage of this script
|
||||
# DUT_SW_VER=my-build-id ./run_basic.bash
|
||||
#
|
||||
# Other DUT variables in test_bed_cfg.bash may also be over-ridden,
|
||||
# including those below. See LANforge 'add_dut' CLI command for
|
||||
# details on what these variables are for.
|
||||
|
||||
# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
|
||||
# Source config file
|
||||
. test_bed_cfg.bash
|
||||
|
||||
echo "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
|
||||
git log -n 8 --oneline >> ./tmp_gitlog.html
|
||||
echo "</pre>" >> ./tmp_gitlog.html
|
||||
|
||||
NOTES_HTML=`pwd`/testbed_notes.html
|
||||
GITLOG=`pwd`/tmp_gitlog.html
|
||||
|
||||
if [ -d "../../../wlan-ap" ]
|
||||
then
|
||||
DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html
|
||||
echo "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
|
||||
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
|
||||
echo "</pre>" >> $DUTGITLOG
|
||||
export DUTGITLOG
|
||||
fi
|
||||
export NOTES_HTML GITLOG
|
||||
|
||||
# TODO: Copy config file to cloud controller and restart it
|
||||
# and/or do other config to make it work.
|
||||
|
||||
# Change to scripts dir
|
||||
cd ../../lanforge/lanforge-scripts/gui
|
||||
|
||||
# Where to place results. basic_regression.bash will use this variable.
|
||||
RSLTS_DIR=/tmp/ben-basic-ecw5410-regression
|
||||
export RSLTS_DIR
|
||||
|
||||
# Clean any existing data from the results dir
|
||||
rm -fr $RSLTS_DIR
|
||||
|
||||
# Clean up old DHCP leases
|
||||
../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases"
|
||||
|
||||
# Run one test
|
||||
# DEFAULT_ENABLE=0 DO_SHORT_AP_STABILITY_RESET=1 ./basic_regression.bash
|
||||
|
||||
|
||||
# Run all tests
|
||||
./basic_regression.bash
|
||||
|
||||
cd -
|
||||
|
||||
if [ ! -d $RSLTS_DIR ]
|
||||
then
|
||||
echo "Test did not run as expected, $RSLTS_DIR not found."
|
||||
mkdir -p $RSLTS_DIR
|
||||
fi
|
||||
|
||||
if [ -f ${MY_TMPDIR}/basic_regression_log.txt ]
|
||||
then
|
||||
echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR"
|
||||
mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/
|
||||
fi
|
||||
|
||||
echo "See results in $RSLTS_DIR"
|
||||
@@ -1,77 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Example usage of this script
|
||||
# DUT_SW_VER=my-build-id ./run_basic.bash
|
||||
#
|
||||
# Other DUT variables in test_bed_cfg.bash may also be over-ridden,
|
||||
# including those below. See LANforge 'add_dut' CLI command for
|
||||
# details on what these variables are for.
|
||||
|
||||
# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
|
||||
# Source config file
|
||||
. test_bed_cfg.bash
|
||||
|
||||
echo "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
|
||||
git log -n 8 --oneline >> ./tmp_gitlog.html
|
||||
echo "</pre>" >> ./tmp_gitlog.html
|
||||
|
||||
NOTES_HTML=`pwd`/testbed_notes.html
|
||||
GITLOG=`pwd`/tmp_gitlog.html
|
||||
|
||||
if [ -d "../../../wlan-ap" ]
|
||||
then
|
||||
DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html
|
||||
echo "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
|
||||
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
|
||||
echo "</pre>" >> $DUTGITLOG
|
||||
export DUTGITLOG
|
||||
fi
|
||||
|
||||
export NOTES_HTML GITLOG
|
||||
|
||||
# TODO: Copy config file to cloud controller and restart it
|
||||
# and/or do other config to make it work.
|
||||
|
||||
# Change to scripts dir
|
||||
cd ../../lanforge/lanforge-scripts/gui
|
||||
|
||||
# Where to place results. basic_regression.bash will use this variable.
|
||||
RSLTS_DIR=/tmp/ben-basic-ecw5410-regression-fast
|
||||
export RSLTS_DIR
|
||||
|
||||
# Clean any existing data from the results dir
|
||||
rm -fr $RSLTS_DIR
|
||||
|
||||
# Clean up old DHCP leases
|
||||
../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases"
|
||||
|
||||
# Run a subset of available tests
|
||||
# See 'Tests to run' comment in basic_regression.bash for available options.
|
||||
|
||||
DEFAULT_ENABLE=0 WCT_DURATION=20s DO_SHORT_AP_BASIC_CX=1 DO_WCT_BI=1 ./basic_regression.bash
|
||||
|
||||
#DEFAULT_ENABLE=0 WCT_DURATION=20s DO_SHORT_AP_BASIC_CX=1 DO_WCT_BI=0 ./basic_regression.bash
|
||||
|
||||
|
||||
# Run all tests
|
||||
#./basic_regression.bash
|
||||
|
||||
cd -
|
||||
|
||||
if [ ! -d $RSLTS_DIR ]
|
||||
then
|
||||
echo "Test did not run as expected, $RSLTS_DIR not found."
|
||||
mkdir -p $RSLTS_DIR
|
||||
fi
|
||||
|
||||
if [ -f ${MY_TMPDIR}/basic_regression_log.txt ]
|
||||
then
|
||||
echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR"
|
||||
mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/
|
||||
fi
|
||||
|
||||
echo "See results in $RSLTS_DIR"
|
||||
@@ -1,55 +0,0 @@
|
||||
# Example test-bed configuration
|
||||
|
||||
# Scripts should source this file to set the default environment variables
|
||||
# and then override the variables specific to their test case (and it can be done
|
||||
# in opposite order for same results
|
||||
#
|
||||
# After the env variables are set,
|
||||
# call the 'lanforge/lanforge-scripts/gui/basic_regression.bash'
|
||||
# from the directory in which it resides.
|
||||
|
||||
PWD=`pwd`
|
||||
AP_SERIAL=${AP_SERIAL:-/dev/ttyUSB3}
|
||||
LF_SERIAL=${LF_SERIAL:-/dev/ttyS4}
|
||||
LFPASSWD=${LFPASSWD:-r} # Root password on LANforge machine
|
||||
AP_AUTO_CFG_FILE=${AP_AUTO_CFG_FILE:-$PWD/AP-Auto-ap-auto-228.txt}
|
||||
WCT_CFG_FILE=${WCT_CFG_FILE:-$PWD/WCT-228sta.txt}
|
||||
DPT_CFG_FILE=${DPT_CFG_FILE:-$PWD/dpt-pkt-sz.txt}
|
||||
SCENARIO_CFG_FILE=${SCENARIO_CFG_FILE:-$PWD/228_sta_scenario.txt}
|
||||
|
||||
# LANforge target machine
|
||||
LFMANAGER=${LFMANAGER:-192.168.3.188}
|
||||
|
||||
# LANforge GUI machine (may often be same as target)
|
||||
GMANAGER=${GMANAGER:-192.168.3.188}
|
||||
GMPORT=${GMPORT:-3990}
|
||||
MY_TMPDIR=${MY_TMPDIR:-/tmp}
|
||||
|
||||
# Test configuration (10 minutes by default, in interest of time)
|
||||
STABILITY_DURATION=${STABILITY_DURATION:-600}
|
||||
TEST_RIG_ID=${TEST_RIG_ID:-Ben-Home-ECW5410-OTA}
|
||||
|
||||
# DUT configuration
|
||||
#DUT_FLAGS=${DUT_FLAGS:-0x22} # AP, WPA-PSK
|
||||
DUT_FLAGS=${DUT_FLAGS:-0x2} # AP, Open
|
||||
DUT_FLAGS_MASK=${DUT_FLAGS_MASK:-0xFFFF}
|
||||
DUT_SW_VER=${DUT_SW_VER:-OpenWrt-Stock}
|
||||
DUT_HW_VER=ECW5410
|
||||
DUT_MODEL=ECW5410
|
||||
DUT_SERIAL=${DUT_SERIAL:-NA}
|
||||
DUT_SSID1=${DUT_SSID1:-OpenWrt-ecw-2}
|
||||
DUT_SSID2=${DUT_SSID2:-OpenWrt-ecw-5}
|
||||
DUT_PASSWD1=${DUT_PASSWD1:-12345678}
|
||||
DUT_PASSWD2=${DUT_PASSWD2:-12345678}
|
||||
DUT_BSSID1=3c:2c:99:f4:51:74
|
||||
DUT_BSSID2=3c:2c:99:f4:51:75
|
||||
|
||||
export LF_SERIAL AP_SERIAL LFPASSWD
|
||||
export AP_AUTO_CFG_FILE WCT_CFG_FILE DPT_CFG_FILE SCENARIO_CFG_FILE
|
||||
export LFMANAGER GMANAGER GMPORT MY_TMPDIR
|
||||
export STABILITY_DURATION TEST_RIG_ID
|
||||
export DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
export DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
export DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
export DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
<!-- Snippet of HTML that will be added to the index.html to describe/document this testbed -->
|
||||
<P>
|
||||
This test-bed consists of a CT522 LANforge test system, with one ath9k a/b/g/n 3x3s and one wave-2
|
||||
4x4 5Ghz radio. It is connected over-the-air in a home office to the DUT, which is placed about 3
|
||||
feet away. The DUT is a Linksys ECW5410 (dual 4x4 wave-2 9984 chipset).
|
||||
Local inteferers include an a/b/g/n AP serving the home. In general, there is not much wifi
|
||||
traffic.
|
||||
<P>
|
||||
@@ -1,10 +0,0 @@
|
||||
profile_link 1.1 STA-AC 64 'DUT: mr8300 Radio-2' NA wiphy0,AUTO -1
|
||||
profile_link 1.1 STA-AC 100 'DUT: mr8300 Radio-1' NA wiphy1,AUTO -1
|
||||
profile_link 1.1 STA-AC 64 'DUT: mr8300 Radio-3' NA wiphy2,AUTO -1
|
||||
profile_link 1.1 upstream-dhcp 1 'DUT: mr8300 LAN' NA eth0,AUTO -1
|
||||
profile_link 1.1 uplink-nat 1 'DUT: uplink LAN 192.168.3.5/24' NA eth1,eth0 -1
|
||||
dut uplink 323 37
|
||||
dut mr8300 459 125
|
||||
resource 1.1 244 252
|
||||
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
[BLANK]
|
||||
sel_port-0: 1.1.eth0
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 0
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 1
|
||||
skip_2: 1
|
||||
skip_5: 1
|
||||
dut5-0: mr8300 OpenWrt-5hi
|
||||
dut2-0: mr8300 OpenWrt-2
|
||||
dut5-1: NA
|
||||
dut2-1: NA
|
||||
dut5-2: NA
|
||||
dut2-2: NA
|
||||
spatial_streams: AUTO
|
||||
bandw_options: AUTO
|
||||
modes: Auto
|
||||
upstream_port: 1.1.1 eth0
|
||||
operator:
|
||||
mconn: 1
|
||||
tos: 0
|
||||
vid_buf: 1000000
|
||||
vid_speed: 700000
|
||||
reset_stall_thresh_udp_dl: 100000
|
||||
reset_stall_thresh_udp_ul: 100000
|
||||
reset_stall_thresh_tcp_dl: 100000
|
||||
reset_stall_thresh_tcp_ul: 100000
|
||||
reset_stall_thresh_l4: 100000
|
||||
reset_stall_thresh_voip: 20000
|
||||
stab_udp_dl_min: 500000
|
||||
stab_udp_dl_max: 0
|
||||
stab_udp_ul_min: 500000
|
||||
stab_udp_ul_max: 0
|
||||
stab_tcp_dl_min: 500000
|
||||
stab_tcp_dl_max: 0
|
||||
stab_tcp_ul_min: 500000
|
||||
stab_tcp_ul_max: 0
|
||||
dl_speed: 85%
|
||||
ul_speed: 85%
|
||||
max_stations_2: 100
|
||||
max_stations_5: 128
|
||||
max_stations_dual: 228
|
||||
lt_sta: 2
|
||||
voip_calls: 20
|
||||
lt_dur: 3600
|
||||
reset_dur: 3600
|
||||
lt_gi: 30
|
||||
dur20: 20
|
||||
hunt_retries: 1
|
||||
cap_dl: 1
|
||||
cap_ul: 0
|
||||
cap_use_pkt_sizes: 0
|
||||
stability_reset_radios: 0
|
||||
pkt_loss_thresh: 10000
|
||||
frame_sizes: 200, 512, 1024, MTU
|
||||
capacities: 1, 2, 5, 10, 20, 40, 64, 128, 256, 512, 1024, MAX
|
||||
radio2-0: 1.1.4 wiphy1
|
||||
radio5-0: 1.1.3 wiphy0
|
||||
radio5-1: 1.1.5 wiphy2
|
||||
basic_cx: 1
|
||||
tput: 0
|
||||
dual_band_tput: 0
|
||||
capacity: 0
|
||||
longterm: 0
|
||||
mix_stability: 0
|
||||
loop_iter: 1
|
||||
reset_batch_size: 1
|
||||
reset_duration_min: 10000
|
||||
reset_duration_max: 60000
|
||||
|
||||
# Configure pass/fail metrics for this testbed.
|
||||
pf_text0: 2.4 DL 200 60Mbps
|
||||
pf_text1: 2.4 DL 512 90Mbps
|
||||
pf_text2: 2.4 DL 1024 110Mbps
|
||||
pf_text3: 2.4 DL MTU 112Mbps
|
||||
pf_text4:
|
||||
pf_text5: 2.4 UL 200 60Mbps
|
||||
pf_text6: 2.4 UL 512 90Mbps
|
||||
pf_text7: 2.4 UL 1024 110Mbps
|
||||
pf_text8: 2.4 UL MTU 112Mbps
|
||||
pf_text9:
|
||||
pf_text10: 5 DL 200 72Mbps
|
||||
pf_text11: 5 DL 512 185Mbps
|
||||
pf_text12: 5 DL 1024 370Mbps
|
||||
pf_text13: 5 DL MTU 520Mbps
|
||||
pf_text14:
|
||||
pf_text15: 5 UL 200 85Mbps
|
||||
pf_text16: 5 UL 512 220Mbps
|
||||
pf_text17: 5 UL 1024 430Mbps
|
||||
pf_text18: 5 UL MTU 600Mbps
|
||||
|
||||
# Tune connect-time thresholds.
|
||||
cx_prcnt: 950000
|
||||
cx_open_thresh: 35
|
||||
cx_psk_thresh: 75
|
||||
cx_1x_thresh: 130
|
||||
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
|
||||
DUT is an MR8300, running TIP OpenWrt.
|
||||
This uses ath10k-ct firmware, and by default, the ath10k driver only supports 32 stations per
|
||||
radio. To improve this, I tweaked the setup using the fwcfg files.
|
||||
The radios also only work on certain frequencies, so one has to configure them
|
||||
carefully.
|
||||
|
||||
See the OpenWrt-overlay directory for files that should be copied onto the DUT
|
||||
to work with this test. Once OpenSync cloud stuff is complete, the overlay may
|
||||
not be needed.
|
||||
@@ -1,46 +0,0 @@
|
||||
|
||||
config wifi-device 'radio0'
|
||||
option type 'mac80211'
|
||||
option hwmode '11a'
|
||||
option path 'soc/40000000.pci/pci0000:00/0000:00:00.0/0000:01:00.0'
|
||||
option htmode 'VHT80'
|
||||
option disabled '0'
|
||||
option channel '149'
|
||||
|
||||
config wifi-iface 'default_radio0'
|
||||
option device 'radio0'
|
||||
option network 'lan'
|
||||
option mode 'ap'
|
||||
option encryption 'none'
|
||||
option ssid 'OpenWrt-MR8300'
|
||||
|
||||
config wifi-device 'radio1'
|
||||
option type 'mac80211'
|
||||
option hwmode '11g'
|
||||
option path 'platform/soc/a000000.wifi'
|
||||
option htmode 'HT20'
|
||||
option disabled '0'
|
||||
option channel '1'
|
||||
|
||||
config wifi-iface 'default_radio1'
|
||||
option device 'radio1'
|
||||
option network 'lan'
|
||||
option mode 'ap'
|
||||
option encryption 'none'
|
||||
option ssid 'OpenWrt-MR8300'
|
||||
|
||||
config wifi-device 'radio2'
|
||||
option type 'mac80211'
|
||||
option hwmode '11a'
|
||||
option path 'platform/soc/a800000.wifi'
|
||||
option htmode 'VHT80'
|
||||
option disabled '0'
|
||||
option channel '36'
|
||||
|
||||
config wifi-iface 'default_radio2'
|
||||
option device 'radio2'
|
||||
option network 'lan'
|
||||
option mode 'ap'
|
||||
option encryption 'none'
|
||||
option ssid 'OpenWrt-MR8300'
|
||||
|
||||
@@ -1,290 +0,0 @@
|
||||
[BLANK]
|
||||
sel_port-0: 1.1.eth0
|
||||
sel_port-1: 1.1.sta00000
|
||||
sel_port-2: 1.1.sta00001
|
||||
sel_port-3: 1.1.sta00002
|
||||
sel_port-4: 1.1.sta00003
|
||||
sel_port-5: 1.1.sta00004
|
||||
sel_port-6: 1.1.sta00005
|
||||
sel_port-7: 1.1.sta00006
|
||||
sel_port-8: 1.1.sta00007
|
||||
sel_port-9: 1.1.sta00008
|
||||
sel_port-10: 1.1.sta00009
|
||||
sel_port-11: 1.1.sta00010
|
||||
sel_port-12: 1.1.sta00011
|
||||
sel_port-13: 1.1.sta00012
|
||||
sel_port-14: 1.1.sta00013
|
||||
sel_port-15: 1.1.sta00014
|
||||
sel_port-16: 1.1.sta00015
|
||||
sel_port-17: 1.1.sta00016
|
||||
sel_port-18: 1.1.sta00017
|
||||
sel_port-19: 1.1.sta00018
|
||||
sel_port-20: 1.1.sta00019
|
||||
sel_port-21: 1.1.sta00020
|
||||
sel_port-22: 1.1.sta00021
|
||||
sel_port-23: 1.1.sta00022
|
||||
sel_port-24: 1.1.sta00023
|
||||
sel_port-25: 1.1.sta00024
|
||||
sel_port-26: 1.1.sta00025
|
||||
sel_port-27: 1.1.sta00026
|
||||
sel_port-28: 1.1.sta00027
|
||||
sel_port-29: 1.1.sta00028
|
||||
sel_port-30: 1.1.sta00029
|
||||
sel_port-31: 1.1.sta00030
|
||||
sel_port-32: 1.1.sta00031
|
||||
sel_port-33: 1.1.sta00032
|
||||
sel_port-34: 1.1.sta00033
|
||||
sel_port-35: 1.1.sta00034
|
||||
sel_port-36: 1.1.sta00035
|
||||
sel_port-37: 1.1.sta00036
|
||||
sel_port-38: 1.1.sta00037
|
||||
sel_port-39: 1.1.sta00038
|
||||
sel_port-40: 1.1.sta00039
|
||||
sel_port-41: 1.1.sta00040
|
||||
sel_port-42: 1.1.sta00041
|
||||
sel_port-43: 1.1.sta00042
|
||||
sel_port-44: 1.1.sta00043
|
||||
sel_port-45: 1.1.sta00044
|
||||
sel_port-46: 1.1.sta00045
|
||||
sel_port-47: 1.1.sta00046
|
||||
sel_port-48: 1.1.sta00047
|
||||
sel_port-49: 1.1.sta00048
|
||||
sel_port-50: 1.1.sta00049
|
||||
sel_port-51: 1.1.sta00050
|
||||
sel_port-52: 1.1.sta00051
|
||||
sel_port-53: 1.1.sta00052
|
||||
sel_port-54: 1.1.sta00053
|
||||
sel_port-55: 1.1.sta00054
|
||||
sel_port-56: 1.1.sta00055
|
||||
sel_port-57: 1.1.sta00056
|
||||
sel_port-58: 1.1.sta00057
|
||||
sel_port-59: 1.1.sta00058
|
||||
sel_port-60: 1.1.sta00059
|
||||
sel_port-61: 1.1.sta00060
|
||||
sel_port-62: 1.1.sta00061
|
||||
sel_port-63: 1.1.sta00062
|
||||
sel_port-64: 1.1.sta00063
|
||||
sel_port-65: 1.1.sta00500
|
||||
sel_port-66: 1.1.sta00501
|
||||
sel_port-67: 1.1.sta00502
|
||||
sel_port-68: 1.1.sta00503
|
||||
sel_port-69: 1.1.sta00504
|
||||
sel_port-70: 1.1.sta00505
|
||||
sel_port-71: 1.1.sta00506
|
||||
sel_port-72: 1.1.sta00507
|
||||
sel_port-73: 1.1.sta00508
|
||||
sel_port-74: 1.1.sta00509
|
||||
sel_port-75: 1.1.sta00510
|
||||
sel_port-76: 1.1.sta00511
|
||||
sel_port-77: 1.1.sta00512
|
||||
sel_port-78: 1.1.sta00513
|
||||
sel_port-79: 1.1.sta00514
|
||||
sel_port-80: 1.1.sta00515
|
||||
sel_port-81: 1.1.sta00516
|
||||
sel_port-82: 1.1.sta00517
|
||||
sel_port-83: 1.1.sta00518
|
||||
sel_port-84: 1.1.sta00519
|
||||
sel_port-85: 1.1.sta00520
|
||||
sel_port-86: 1.1.sta00521
|
||||
sel_port-87: 1.1.sta00522
|
||||
sel_port-88: 1.1.sta00523
|
||||
sel_port-89: 1.1.sta00524
|
||||
sel_port-90: 1.1.sta00525
|
||||
sel_port-91: 1.1.sta00526
|
||||
sel_port-92: 1.1.sta00527
|
||||
sel_port-93: 1.1.sta00528
|
||||
sel_port-94: 1.1.sta00529
|
||||
sel_port-95: 1.1.sta00530
|
||||
sel_port-96: 1.1.sta00531
|
||||
sel_port-97: 1.1.sta00532
|
||||
sel_port-98: 1.1.sta00533
|
||||
sel_port-99: 1.1.sta00534
|
||||
sel_port-100: 1.1.sta00535
|
||||
sel_port-101: 1.1.sta00536
|
||||
sel_port-102: 1.1.sta00537
|
||||
sel_port-103: 1.1.sta00538
|
||||
sel_port-104: 1.1.sta00539
|
||||
sel_port-105: 1.1.sta00540
|
||||
sel_port-106: 1.1.sta00541
|
||||
sel_port-107: 1.1.sta00542
|
||||
sel_port-108: 1.1.sta00543
|
||||
sel_port-109: 1.1.sta00544
|
||||
sel_port-110: 1.1.sta00545
|
||||
sel_port-111: 1.1.sta00546
|
||||
sel_port-112: 1.1.sta00547
|
||||
sel_port-113: 1.1.sta00548
|
||||
sel_port-114: 1.1.sta00549
|
||||
sel_port-115: 1.1.sta00550
|
||||
sel_port-116: 1.1.sta00551
|
||||
sel_port-117: 1.1.sta00552
|
||||
sel_port-118: 1.1.sta00553
|
||||
sel_port-119: 1.1.sta00554
|
||||
sel_port-120: 1.1.sta00555
|
||||
sel_port-121: 1.1.sta00556
|
||||
sel_port-122: 1.1.sta00557
|
||||
sel_port-123: 1.1.sta00558
|
||||
sel_port-124: 1.1.sta00559
|
||||
sel_port-125: 1.1.sta00560
|
||||
sel_port-126: 1.1.sta00561
|
||||
sel_port-127: 1.1.sta00562
|
||||
sel_port-128: 1.1.sta00563
|
||||
sel_port-129: 1.1.sta00564
|
||||
sel_port-130: 1.1.sta00565
|
||||
sel_port-131: 1.1.sta00566
|
||||
sel_port-132: 1.1.sta00567
|
||||
sel_port-133: 1.1.sta00568
|
||||
sel_port-134: 1.1.sta00569
|
||||
sel_port-135: 1.1.sta00570
|
||||
sel_port-136: 1.1.sta00571
|
||||
sel_port-137: 1.1.sta00572
|
||||
sel_port-138: 1.1.sta00573
|
||||
sel_port-139: 1.1.sta00574
|
||||
sel_port-140: 1.1.sta00575
|
||||
sel_port-141: 1.1.sta00576
|
||||
sel_port-142: 1.1.sta00577
|
||||
sel_port-143: 1.1.sta00578
|
||||
sel_port-144: 1.1.sta00579
|
||||
sel_port-145: 1.1.sta00580
|
||||
sel_port-146: 1.1.sta00581
|
||||
sel_port-147: 1.1.sta00582
|
||||
sel_port-148: 1.1.sta00583
|
||||
sel_port-149: 1.1.sta00584
|
||||
sel_port-150: 1.1.sta00585
|
||||
sel_port-151: 1.1.sta00586
|
||||
sel_port-152: 1.1.sta00587
|
||||
sel_port-153: 1.1.sta00588
|
||||
sel_port-154: 1.1.sta00589
|
||||
sel_port-155: 1.1.sta00590
|
||||
sel_port-156: 1.1.sta00591
|
||||
sel_port-157: 1.1.sta00592
|
||||
sel_port-158: 1.1.sta00593
|
||||
sel_port-159: 1.1.sta00594
|
||||
sel_port-160: 1.1.sta00595
|
||||
sel_port-161: 1.1.sta00596
|
||||
sel_port-162: 1.1.sta00597
|
||||
sel_port-163: 1.1.sta00598
|
||||
sel_port-164: 1.1.sta00599
|
||||
sel_port-165: 1.1.sta01000
|
||||
sel_port-166: 1.1.sta01001
|
||||
sel_port-167: 1.1.sta01002
|
||||
sel_port-168: 1.1.sta01003
|
||||
sel_port-169: 1.1.sta01004
|
||||
sel_port-170: 1.1.sta01005
|
||||
sel_port-171: 1.1.sta01006
|
||||
sel_port-172: 1.1.sta01007
|
||||
sel_port-173: 1.1.sta01008
|
||||
sel_port-174: 1.1.sta01009
|
||||
sel_port-175: 1.1.sta01010
|
||||
sel_port-176: 1.1.sta01011
|
||||
sel_port-177: 1.1.sta01012
|
||||
sel_port-178: 1.1.sta01013
|
||||
sel_port-179: 1.1.sta01014
|
||||
sel_port-180: 1.1.sta01015
|
||||
sel_port-181: 1.1.sta01016
|
||||
sel_port-182: 1.1.sta01017
|
||||
sel_port-183: 1.1.sta01018
|
||||
sel_port-184: 1.1.sta01019
|
||||
sel_port-185: 1.1.sta01020
|
||||
sel_port-186: 1.1.sta01021
|
||||
sel_port-187: 1.1.sta01022
|
||||
sel_port-188: 1.1.sta01023
|
||||
sel_port-189: 1.1.sta01024
|
||||
sel_port-190: 1.1.sta01025
|
||||
sel_port-191: 1.1.sta01026
|
||||
sel_port-192: 1.1.sta01027
|
||||
sel_port-193: 1.1.sta01028
|
||||
sel_port-194: 1.1.sta01029
|
||||
sel_port-195: 1.1.sta01030
|
||||
sel_port-196: 1.1.sta01031
|
||||
sel_port-197: 1.1.sta01032
|
||||
sel_port-198: 1.1.sta01033
|
||||
sel_port-199: 1.1.sta01034
|
||||
sel_port-200: 1.1.sta01035
|
||||
sel_port-201: 1.1.sta01036
|
||||
sel_port-202: 1.1.sta01037
|
||||
sel_port-203: 1.1.sta01038
|
||||
sel_port-204: 1.1.sta01039
|
||||
sel_port-205: 1.1.sta01040
|
||||
sel_port-206: 1.1.sta01041
|
||||
sel_port-207: 1.1.sta01042
|
||||
sel_port-208: 1.1.sta01043
|
||||
sel_port-209: 1.1.sta01044
|
||||
sel_port-210: 1.1.sta01045
|
||||
sel_port-211: 1.1.sta01046
|
||||
sel_port-212: 1.1.sta01047
|
||||
sel_port-213: 1.1.sta01048
|
||||
sel_port-214: 1.1.sta01049
|
||||
sel_port-215: 1.1.sta01050
|
||||
sel_port-216: 1.1.sta01051
|
||||
sel_port-217: 1.1.sta01052
|
||||
sel_port-218: 1.1.sta01053
|
||||
sel_port-219: 1.1.sta01054
|
||||
sel_port-220: 1.1.sta01055
|
||||
sel_port-221: 1.1.sta01056
|
||||
sel_port-222: 1.1.sta01057
|
||||
sel_port-223: 1.1.sta01058
|
||||
sel_port-224: 1.1.sta01059
|
||||
sel_port-225: 1.1.sta01060
|
||||
sel_port-226: 1.1.sta01061
|
||||
sel_port-227: 1.1.sta01062
|
||||
sel_port-228: 1.1.sta01063
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 0
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 1
|
||||
skip_2: 0
|
||||
skip_5: 0
|
||||
batch_size: 1,2,5,10,20,45,60,100
|
||||
loop_iter: 1
|
||||
duration: 60000
|
||||
test_groups: 0
|
||||
test_groups_subset: 0
|
||||
protocol: UDP-IPv4
|
||||
dl_rate_sel: Total Download Rate:
|
||||
dl_rate: 1000000000
|
||||
ul_rate_sel: Total Upload Rate:
|
||||
ul_rate: 0
|
||||
prcnt_tcp: 100000
|
||||
l4_endp:
|
||||
pdu_sz: -1
|
||||
mss_sel: 1
|
||||
sock_buffer: 0
|
||||
ip_tos: 0
|
||||
multi_conn: -1
|
||||
min_speed: -1
|
||||
ps_interval: 60-second Running Average
|
||||
fairness: 0
|
||||
naptime: 0
|
||||
before_clear: 5000
|
||||
rpt_timer: 1000
|
||||
try_lower: 0
|
||||
rnd_rate: 1
|
||||
leave_ports_up: 0
|
||||
down_quiesce: 0
|
||||
udp_nat: 1
|
||||
record_other_ssids: 0
|
||||
clear_reset_counters: 0
|
||||
do_pf: 0
|
||||
pf_min_period_dl: 128000
|
||||
pf_min_period_ul: 0
|
||||
pf_max_reconnects: 0
|
||||
use_mix_pdu: 0
|
||||
pdu_prcnt_pps: 1
|
||||
pdu_prcnt_bps: 0
|
||||
pdu_mix_ln-0:
|
||||
show_scan: 1
|
||||
show_golden_3p: 0
|
||||
save_csv: 0
|
||||
show_realtime: 1
|
||||
show_pie: 1
|
||||
show_per_loop_totals: 1
|
||||
show_cx_time: 1
|
||||
show_dhcp: 1
|
||||
show_anqp: 1
|
||||
show_4way: 1
|
||||
show_latency: 1
|
||||
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
[BLANK]
|
||||
sel_port-0: 1.1.eth0
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 0
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 0
|
||||
skip_2: 0
|
||||
skip_5: 0
|
||||
selected_dut: mr8300
|
||||
duration: 15000
|
||||
traffic_port: 1.1.6 sta00000
|
||||
upstream_port: 1.1.1 eth0
|
||||
path_loss: 10
|
||||
speed: 85%
|
||||
speed2: 0Kbps
|
||||
min_rssi_bound: -150
|
||||
max_rssi_bound: 0
|
||||
channels: AUTO
|
||||
modes: Auto
|
||||
pkts: 60;142;256;512;1024;MTU;4000
|
||||
spatial_streams: AUTO
|
||||
security_options: AUTO
|
||||
bandw_options: AUTO
|
||||
traffic_types: UDP
|
||||
directions: DUT Transmit;DUT Receive
|
||||
txo_preamble: OFDM
|
||||
txo_mcs: 0 CCK, OFDM, HT, VHT
|
||||
txo_retries: No Retry
|
||||
txo_sgi: OFF
|
||||
txo_txpower: 15
|
||||
attenuator: 0
|
||||
attenuator2: 0
|
||||
attenuator_mod: 255
|
||||
attenuator_mod2: 255
|
||||
attenuations: 0..+50..950
|
||||
attenuations2: 0..+50..950
|
||||
chamber: 0
|
||||
tt_deg: 0..+45..359
|
||||
cust_pkt_sz:
|
||||
show_3s: 0
|
||||
show_ll_graphs: 0
|
||||
show_gp_graphs: 1
|
||||
show_1m: 1
|
||||
pause_iter: 0
|
||||
show_realtime: 1
|
||||
operator:
|
||||
mconn: 1
|
||||
mpkt: 1000
|
||||
tos: 0
|
||||
loop_iterations: 1
|
||||
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Example usage of this script
|
||||
# DUT_SW_VER=my-build-id ./run_basic.bash
|
||||
#
|
||||
# Other DUT variables in test_bed_cfg.bash may also be over-ridden,
|
||||
# including those below. See LANforge 'add_dut' CLI command for
|
||||
# details on what these variables are for.
|
||||
|
||||
# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
|
||||
# Source config file
|
||||
. test_bed_cfg.bash
|
||||
|
||||
echo "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
|
||||
git log -n 8 --oneline >> ./tmp_gitlog.html
|
||||
echo "</pre>" >> ./tmp_gitlog.html
|
||||
|
||||
NOTES_HTML=`pwd`/testbed_notes.html
|
||||
GITLOG=`pwd`/tmp_gitlog.html
|
||||
|
||||
if [ -d "../../../wlan-ap" ]
|
||||
then
|
||||
DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html
|
||||
echo "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
|
||||
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
|
||||
echo "</pre>" >> $DUTGITLOG
|
||||
export DUTGITLOG
|
||||
fi
|
||||
export NOTES_HTML GITLOG
|
||||
|
||||
# TODO: Copy config file to cloud controller and restart it
|
||||
# and/or do other config to make it work.
|
||||
|
||||
# Change to scripts dir
|
||||
cd ../../lanforge/lanforge-scripts/gui
|
||||
|
||||
# Where to place results. basic_regression.bash will use this variable.
|
||||
RSLTS_DIR=/tmp/ben-basic-regression
|
||||
export RSLTS_DIR
|
||||
|
||||
# Clean any existing data from the results dir
|
||||
rm -fr $RSLTS_DIR
|
||||
|
||||
# Clean up old DHCP leases
|
||||
../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases"
|
||||
|
||||
# Run one test
|
||||
# DEFAULT_ENABLE=0 DO_SHORT_AP_STABILITY_RESET=1 ./basic_regression.bash
|
||||
|
||||
|
||||
# Run all tests
|
||||
./basic_regression.bash
|
||||
|
||||
cd -
|
||||
|
||||
if [ ! -d $RSLTS_DIR ]
|
||||
then
|
||||
echo "Test did not run as expected, $RSLTS_DIR not found."
|
||||
mkdir -p $RSLTS_DIR
|
||||
fi
|
||||
|
||||
if [ -f ${MY_TMPDIR}/basic_regression_log.txt ]
|
||||
then
|
||||
echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR"
|
||||
mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/
|
||||
fi
|
||||
|
||||
echo "See results in $RSLTS_DIR"
|
||||
@@ -1,77 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Example usage of this script
|
||||
# DUT_SW_VER=my-build-id ./run_basic.bash
|
||||
#
|
||||
# Other DUT variables in test_bed_cfg.bash may also be over-ridden,
|
||||
# including those below. See LANforge 'add_dut' CLI command for
|
||||
# details on what these variables are for.
|
||||
|
||||
# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
|
||||
# Source config file
|
||||
. test_bed_cfg.bash
|
||||
|
||||
echo "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
|
||||
git log -n 8 --oneline >> ./tmp_gitlog.html
|
||||
echo "</pre>" >> ./tmp_gitlog.html
|
||||
|
||||
NOTES_HTML=`pwd`/testbed_notes.html
|
||||
GITLOG=`pwd`/tmp_gitlog.html
|
||||
|
||||
if [ -d "../../../wlan-ap" ]
|
||||
then
|
||||
DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html
|
||||
echo "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
|
||||
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
|
||||
echo "</pre>" >> $DUTGITLOG
|
||||
export DUTGITLOG
|
||||
fi
|
||||
|
||||
export NOTES_HTML GITLOG
|
||||
|
||||
# TODO: Copy config file to cloud controller and restart it
|
||||
# and/or do other config to make it work.
|
||||
|
||||
# Change to scripts dir
|
||||
cd ../../lanforge/lanforge-scripts/gui
|
||||
|
||||
# Where to place results. basic_regression.bash will use this variable.
|
||||
RSLTS_DIR=/tmp/ben-basic-regression-fast
|
||||
export RSLTS_DIR
|
||||
|
||||
# Clean any existing data from the results dir
|
||||
rm -fr $RSLTS_DIR
|
||||
|
||||
# Clean up old DHCP leases
|
||||
../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases"
|
||||
|
||||
# Run a subset of available tests
|
||||
# See 'Tests to run' comment in basic_regression.bash for available options.
|
||||
|
||||
DEFAULT_ENABLE=0 WCT_DURATION=20s DO_SHORT_AP_BASIC_CX=1 DO_WCT_BI=1 ./basic_regression.bash
|
||||
|
||||
#DEFAULT_ENABLE=0 WCT_DURATION=20s DO_SHORT_AP_BASIC_CX=1 DO_WCT_BI=0 ./basic_regression.bash
|
||||
|
||||
|
||||
# Run all tests
|
||||
#./basic_regression.bash
|
||||
|
||||
cd -
|
||||
|
||||
if [ ! -d $RSLTS_DIR ]
|
||||
then
|
||||
echo "Test did not run as expected, $RSLTS_DIR not found."
|
||||
mkdir -p $RSLTS_DIR
|
||||
fi
|
||||
|
||||
if [ -f ${MY_TMPDIR}/basic_regression_log.txt ]
|
||||
then
|
||||
echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR"
|
||||
mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/
|
||||
fi
|
||||
|
||||
echo "See results in $RSLTS_DIR"
|
||||
@@ -1,58 +0,0 @@
|
||||
# Example test-bed configuration
|
||||
|
||||
# Scripts should source this file to set the default environment variables
|
||||
# and then override the variables specific to their test case (and it can be done
|
||||
# in opposite order for same results
|
||||
#
|
||||
# After the env variables are set,
|
||||
# call the 'lanforge/lanforge-scripts/gui/basic_regression.bash'
|
||||
# from the directory in which it resides.
|
||||
|
||||
PWD=`pwd`
|
||||
AP_SERIAL=${AP_SERIAL:-/dev/ttyUSB1}
|
||||
LF_SERIAL=${LF_SERIAL:-/dev/ttyS5}
|
||||
LFPASSWD=${LFPASSWD:-r} # Root password on LANforge machine
|
||||
AP_AUTO_CFG_FILE=${AP_AUTO_CFG_FILE:-$PWD/AP-Auto-ap-auto-228.txt}
|
||||
WCT_CFG_FILE=${WCT_CFG_FILE:-$PWD/WCT-228sta.txt}
|
||||
DPT_CFG_FILE=${DPT_CFG_FILE:-$PWD/dpt-pkt-sz.txt}
|
||||
SCENARIO_CFG_FILE=${SCENARIO_CFG_FILE:-$PWD/228_sta_scenario.txt}
|
||||
|
||||
# LANforge target machine
|
||||
LFMANAGER=${LFMANAGER:-192.168.3.190}
|
||||
|
||||
# LANforge GUI machine (may often be same as target)
|
||||
GMANAGER=${GMANAGER:-192.168.3.190}
|
||||
GMPORT=${GMPORT:-3990}
|
||||
MY_TMPDIR=${MY_TMPDIR:-/tmp}
|
||||
|
||||
# Test configuration (10 minutes by default, in interest of time)
|
||||
STABILITY_DURATION=${STABILITY_DURATION:-600}
|
||||
TEST_RIG_ID=${TEST_RIG_ID:-Ben-Home-OTA}
|
||||
|
||||
# DUT configuration
|
||||
#DUT_FLAGS=${DUT_FLAGS:-0x22} # AP, WPA-PSK
|
||||
DUT_FLAGS=${DUT_FLAGS:-0x2} # AP, Open
|
||||
DUT_FLAGS_MASK=${DUT_FLAGS_MASK:-0xFFFF}
|
||||
DUT_SW_VER=${DUT_SW_VER:-OpenWrt-Stock}
|
||||
DUT_HW_VER=Linksys-MR8300
|
||||
DUT_MODEL=Linksys-MR8300
|
||||
DUT_SERIAL=${DUT_SERIAL:-NA}
|
||||
DUT_SSID1=${DUT_SSID1:-OpenWrt-2}
|
||||
DUT_SSID2=${DUT_SSID2:-OpenWrt-5lo}
|
||||
DUT_SSID3=${DUT_SSID3:-OpenWrt-5hi}
|
||||
DUT_PASSWD1=${DUT_PASSWD1:-12345678}
|
||||
DUT_PASSWD2=${DUT_PASSWD2:-12345678}
|
||||
DUT_PASSWD3=${DUT_PASSWD3:-12345678}
|
||||
DUT_BSSID1=32:23:03:81:9c:29
|
||||
DUT_BSSID2=30:23:03:81:9c:27
|
||||
DUT_BSSID3=30:23:03:81:9c:28
|
||||
|
||||
export LF_SERIAL AP_SERIAL LFPASSWD
|
||||
export AP_AUTO_CFG_FILE WCT_CFG_FILE DPT_CFG_FILE SCENARIO_CFG_FILE
|
||||
export LFMANAGER GMANAGER GMPORT MY_TMPDIR
|
||||
export STABILITY_DURATION TEST_RIG_ID
|
||||
export DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
export DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
export DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
export DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
|
||||
DUT is an MR8300, running TIP OpenWrt.
|
||||
This uses ath10k-ct firmware, and by default, the ath10k driver only supports 32 stations per
|
||||
radio. To improve this, I tweaked the setup using the fwcfg files.
|
||||
The radios also only work on certain frequencies, so one has to configure them
|
||||
carefully.
|
||||
|
||||
See the OpenWrt-overlay directory for files that should be copied onto the DUT
|
||||
to work with this test. Once OpenSync cloud stuff is complete, the overlay may
|
||||
not be needed.
|
||||
@@ -1,57 +0,0 @@
|
||||
config wifi-device 'radio0'
|
||||
option type 'mac80211'
|
||||
option hwmode '11a'
|
||||
option path 'soc/40000000.pci/pci0000:00/0000:00:00.0/0000:01:00.0'
|
||||
option htmode 'VHT80'
|
||||
option disabled '0'
|
||||
option channel '149'
|
||||
|
||||
config wifi-iface 'default_radio0'
|
||||
option device 'radio0'
|
||||
option network 'lan'
|
||||
option mode 'ap'
|
||||
option disabled '0'
|
||||
option ssid 'Default-SSID-5gu'
|
||||
option hidden '0'
|
||||
option key '12345678'
|
||||
option encryption 'psk-mixed'
|
||||
option isolate '1'
|
||||
|
||||
config wifi-device 'radio1'
|
||||
option type 'mac80211'
|
||||
option hwmode '11g'
|
||||
option path 'platform/soc/a000000.wifi'
|
||||
option htmode 'HT20'
|
||||
option disabled '0'
|
||||
option channel '6'
|
||||
|
||||
config wifi-iface 'default_radio1'
|
||||
option device 'radio1'
|
||||
option network 'lan'
|
||||
option mode 'ap'
|
||||
option disabled '0'
|
||||
option ssid 'Default-SSID-2g'
|
||||
option hidden '0'
|
||||
option key '12345678'
|
||||
option encryption 'psk-mixed'
|
||||
option isolate '1'
|
||||
|
||||
config wifi-device 'radio2'
|
||||
option type 'mac80211'
|
||||
option hwmode '11a'
|
||||
option path 'platform/soc/a800000.wifi'
|
||||
option htmode 'VHT80'
|
||||
option disabled '0'
|
||||
option channel '36'
|
||||
|
||||
config wifi-iface 'default_radio2'
|
||||
option device 'radio2'
|
||||
option network 'lan'
|
||||
option mode 'ap'
|
||||
option ssid 'Default-SSID-5gl'
|
||||
option key '12345678'
|
||||
option encryption 'psk-mixed'
|
||||
option isolate '1'
|
||||
option hidden '0'
|
||||
option disabled '0'
|
||||
|
||||
@@ -1,110 +0,0 @@
|
||||
[BLANK]
|
||||
sel_port-0: 1.1.sta00500
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 0
|
||||
kpi_id: AP Auto
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 1
|
||||
skip_2: 1
|
||||
skip_5: 1
|
||||
dut5b-0: ea8300 Default-SSID-5gu
|
||||
dut5-0: ea8300 Default-SSID-5gl
|
||||
dut2-0: ea8300 Default-SSID-2g
|
||||
dut5b-1: NA
|
||||
dut5-1: NA
|
||||
dut2-1: NA
|
||||
dut5b-2: NA
|
||||
dut5-2: NA
|
||||
dut2-2: NA
|
||||
spatial_streams: AUTO
|
||||
bandw_options: AUTO
|
||||
modes: Auto
|
||||
upstream_port: 1.1.2 eth2
|
||||
operator:
|
||||
mconn: 1
|
||||
tos: 0
|
||||
vid_buf: 1000000
|
||||
vid_speed: 700000
|
||||
reset_stall_thresh_udp_dl: 9600
|
||||
reset_stall_thresh_udp_ul: 9600
|
||||
reset_stall_thresh_tcp_dl: 9600
|
||||
reset_stall_thresh_tcp_ul: 9600
|
||||
reset_stall_thresh_l4: 100000
|
||||
reset_stall_thresh_voip: 20000
|
||||
stab_udp_dl_min: 56000
|
||||
stab_udp_dl_max: 0
|
||||
stab_udp_ul_min: 56000
|
||||
stab_udp_ul_max: 0
|
||||
stab_tcp_dl_min: 500000
|
||||
stab_tcp_dl_max: 0
|
||||
stab_tcp_ul_min: 500000
|
||||
stab_tcp_ul_max: 0
|
||||
dl_speed: 85%
|
||||
ul_speed: 85%
|
||||
max_stations_2: 128
|
||||
max_stations_5: 128
|
||||
max_stations_dual: 256
|
||||
lt_sta: 2
|
||||
voip_calls: 0
|
||||
lt_dur: 3600
|
||||
reset_dur: 600
|
||||
lt_gi: 30
|
||||
dur20: 20
|
||||
hunt_retries: 1
|
||||
cap_dl: 1
|
||||
cap_ul: 0
|
||||
cap_use_pkt_sizes: 0
|
||||
stability_reset_radios: 0
|
||||
pkt_loss_thresh: 10000
|
||||
frame_sizes: 200, 512, 1024, MTU
|
||||
capacities: 1, 2, 5, 10, 20, 40, 64, 128, 256, 512, 1024, MAX
|
||||
radio2-0: 1.1.4 wiphy0
|
||||
radio2-1: 1.1.6 wiphy2
|
||||
radio5-0: 1.1.5 wiphy1
|
||||
radio5-1: 1.1.7 wiphy3
|
||||
radio5-2: 1.1.8 wiphy4
|
||||
radio5-3: 1.1.9 wiphy5
|
||||
radio5-4: 1.1.10 wiphy6
|
||||
radio5-5: 1.1.11 wiphy7
|
||||
basic_cx: 1
|
||||
tput: 0
|
||||
dual_band_tput: 0
|
||||
capacity: 0
|
||||
longterm: 0
|
||||
mix_stability: 0
|
||||
loop_iter: 1
|
||||
reset_batch_size: 1
|
||||
reset_duration_min: 10000
|
||||
reset_duration_max: 60000
|
||||
|
||||
# Configure pass/fail metrics for this testbed.
|
||||
pf_text0: 2.4 DL 200 70Mbps
|
||||
pf_text1: 2.4 DL 512 110Mbps
|
||||
pf_text2: 2.4 DL 1024 115Mbps
|
||||
pf_text3: 2.4 DL MTU 120Mbps
|
||||
pf_text4:
|
||||
pf_text5: 2.4 UL 200 88Mbps
|
||||
pf_text6: 2.4 UL 512 106Mbps
|
||||
pf_text7: 2.4 UL 1024 115Mbps
|
||||
pf_text8: 2.4 UL MTU 120Mbps
|
||||
pf_text9:
|
||||
pf_text10: 5 DL 200 72Mbps
|
||||
pf_text11: 5 DL 512 185Mbps
|
||||
pf_text12: 5 DL 1024 370Mbps
|
||||
pf_text13: 5 DL MTU 525Mbps
|
||||
pf_text14:
|
||||
pf_text15: 5 UL 200 90Mbps
|
||||
pf_text16: 5 UL 512 230Mbps
|
||||
pf_text17: 5 UL 1024 450Mbps
|
||||
pf_text18: 5 UL MTU 630Mbps
|
||||
|
||||
# Tune connect-time thresholds.
|
||||
cx_prcnt: 950000
|
||||
cx_open_thresh: 35
|
||||
cx_psk_thresh: 75
|
||||
cx_1x_thresh: 130
|
||||
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
[BLANK]
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 0
|
||||
kpi_id: Dataplane
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 0
|
||||
skip_2: 0
|
||||
skip_5: 0
|
||||
selected_dut: ea8300
|
||||
duration: 15000
|
||||
traffic_port: 1.1.136 sta01001
|
||||
upstream_port: 1.1.2 eth2
|
||||
path_loss: 10
|
||||
speed: 85%
|
||||
speed2: 0Kbps
|
||||
min_rssi_bound: -150
|
||||
max_rssi_bound: 0
|
||||
channels: AUTO
|
||||
modes: Auto
|
||||
pkts: 60;142;256;512;1024;MTU;4000
|
||||
spatial_streams: AUTO
|
||||
security_options: AUTO
|
||||
bandw_options: AUTO
|
||||
traffic_types: UDP
|
||||
directions: DUT Transmit;DUT Receive
|
||||
txo_preamble: OFDM
|
||||
txo_mcs: 0 CCK, OFDM, HT, VHT
|
||||
txo_retries: No Retry
|
||||
txo_sgi: OFF
|
||||
txo_txpower: 15
|
||||
attenuator: 0
|
||||
attenuator2: 0
|
||||
attenuator_mod: 255
|
||||
attenuator_mod2: 255
|
||||
attenuations: 0..+50..950
|
||||
attenuations2: 0..+50..950
|
||||
chamber: 0
|
||||
tt_deg: 0..+45..359
|
||||
cust_pkt_sz:
|
||||
show_3s: 0
|
||||
show_ll_graphs: 1
|
||||
show_gp_graphs: 1
|
||||
show_1m: 1
|
||||
pause_iter: 0
|
||||
show_realtime: 1
|
||||
operator:
|
||||
mconn: 1
|
||||
mpkt: 1000
|
||||
tos: 0
|
||||
loop_iterations: 1
|
||||
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Example usage of this script
|
||||
# DUT_SW_VER=my-build-id ./run_basic.bash
|
||||
#
|
||||
# Other DUT variables in test_bed_cfg.bash may also be over-ridden,
|
||||
# including those below. See LANforge 'add_dut' CLI command for
|
||||
# details on what these variables are for.
|
||||
|
||||
# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
|
||||
# Source config file
|
||||
. test_bed_cfg.bash
|
||||
|
||||
echo "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
|
||||
git log -n 8 --oneline >> ./tmp_gitlog.html
|
||||
echo "</pre>" >> ./tmp_gitlog.html
|
||||
|
||||
NOTES_HTML=`pwd`/testbed_notes.html
|
||||
GITLOG=`pwd`/tmp_gitlog.html
|
||||
|
||||
if [ -d "../../../wlan-ap" ]
|
||||
then
|
||||
DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html
|
||||
echo "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
|
||||
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
|
||||
echo "</pre>" >> $DUTGITLOG
|
||||
export DUTGITLOG
|
||||
fi
|
||||
export NOTES_HTML GITLOG
|
||||
|
||||
# TODO: Copy config file to cloud controller and restart it
|
||||
# and/or do other config to make it work.
|
||||
|
||||
# Change to scripts dir
|
||||
cd ../../lanforge/lanforge-scripts/gui
|
||||
|
||||
# Where to place results. basic_regression.bash will use this variable.
|
||||
RSLTS_DIR=/tmp/ferndale-01-basic-regression
|
||||
export RSLTS_DIR
|
||||
|
||||
# Clean any existing data from the results dir
|
||||
rm -fr $RSLTS_DIR
|
||||
|
||||
# Run one test
|
||||
# DEFAULT_ENABLE=0 DO_SHORT_AP_STABILITY_RESET=1 ./basic_regression.bash
|
||||
|
||||
# Clean up old DHCP leases
|
||||
../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases"
|
||||
|
||||
# Run all tests
|
||||
./basic_regression.bash
|
||||
|
||||
cd -
|
||||
|
||||
if [ ! -d $RSLTS_DIR ]
|
||||
then
|
||||
echo "Test did not run as expected, $RSLTS_DIR not found."
|
||||
mkdir -p $RSLTS_DIR
|
||||
fi
|
||||
|
||||
if [ -f ${MY_TMPDIR}/basic_regression_log.txt ]
|
||||
then
|
||||
echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR"
|
||||
mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/
|
||||
fi
|
||||
|
||||
echo "See results in $RSLTS_DIR"
|
||||
@@ -1,83 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Example usage of this script
|
||||
# DUT_SW_VER=my-build-id ./run_basic.bash
|
||||
#
|
||||
# Other DUT variables in test_bed_cfg.bash may also be over-ridden,
|
||||
# including those below. See LANforge 'add_dut' CLI command for
|
||||
# details on what these variables are for.
|
||||
|
||||
# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
|
||||
set -x
|
||||
|
||||
DO_SHORT_AP_BASIC_CX=${DO_SHORT_AP_BASIC_CX:-1}
|
||||
DO_WCT_BI=${DO_WCT_BI:-1}
|
||||
|
||||
export DO_SHORT_AP_BASI_CX DO_WCT_BI
|
||||
|
||||
# Source config file
|
||||
. test_bed_cfg.bash
|
||||
|
||||
echo "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
|
||||
git log -n 8 --oneline >> ./tmp_gitlog.html
|
||||
echo "</pre>" >> ./tmp_gitlog.html
|
||||
|
||||
NOTES_HTML=`pwd`/testbed_notes.html
|
||||
GITLOG=`pwd`/tmp_gitlog.html
|
||||
|
||||
if [ -d "../../../wlan-ap" ]
|
||||
then
|
||||
DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html
|
||||
echo "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
|
||||
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
|
||||
echo "</pre>" >> $DUTGITLOG
|
||||
export DUTGITLOG
|
||||
fi
|
||||
export NOTES_HTML GITLOG
|
||||
|
||||
# TODO: Copy config file to cloud controller and restart it
|
||||
# and/or do other config to make it work.
|
||||
|
||||
# Change to scripts dir
|
||||
cd ../../lanforge/lanforge-scripts/gui
|
||||
|
||||
# Where to place results. basic_regression.bash will use this variable.
|
||||
RSLTS_DIR=/tmp/ferndale-01-basic-regression-fast
|
||||
export RSLTS_DIR
|
||||
|
||||
# Clean any existing data from the results dir
|
||||
rm -fr $RSLTS_DIR
|
||||
|
||||
# Clean up old DHCP leases
|
||||
../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases"
|
||||
|
||||
# Run a subset of available tests
|
||||
# See 'Tests to run' comment in basic_regression.bash for available options.
|
||||
|
||||
#DEFAULT_ENABLE=0 WCT_DURATION=20s DO_SHORT_AP_BASIC_CX=1 DO_WCT_BI=1 ./basic_regression.bash
|
||||
|
||||
DEFAULT_ENABLE=0 WCT_DURATION=20s ./basic_regression.bash
|
||||
|
||||
|
||||
# Run all tests
|
||||
#./basic_regression.bash
|
||||
|
||||
cd -
|
||||
|
||||
if [ ! -d $RSLTS_DIR ]
|
||||
then
|
||||
echo "Test did not run as expected, $RSLTS_DIR not found."
|
||||
mkdir -p $RSLTS_DIR
|
||||
fi
|
||||
|
||||
if [ -f ${MY_TMPDIR}/basic_regression_log.txt ]
|
||||
then
|
||||
echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR"
|
||||
mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/
|
||||
fi
|
||||
|
||||
echo "See results in $RSLTS_DIR"
|
||||
@@ -1,15 +0,0 @@
|
||||
profile_link 1.1 STA-AC 64 'DUT: ea8300 Radio-1' NA wiphy0,AUTO -1
|
||||
profile_link 1.1 STA-AC 64 'DUT: ea8300 Radio-1' NA wiphy2,AUTO -1
|
||||
profile_link 1.1 STA-AC 64 'DUT: ea8300 Radio-2' NA wiphy1,AUTO -1
|
||||
profile_link 1.1 STA-AC 64 'DUT: ea8300 Radio-3' NA wiphy3,AUTO -1
|
||||
profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1
|
||||
profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 92.168.100.1/24' NA eth3,eth2 -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ea8300 Radio-2' NA wiphy4,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ea8300 Radio-3' NA wiphy5,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ea8300 Radio-2' NA wiphy6,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ea8300 Radio-3' NA wiphy7,AUTO -1
|
||||
dut ea8300 393 148
|
||||
dut upstream 306 62
|
||||
resource 1.1 132 218
|
||||
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
profile_link 1.1 STA-AC 8 'DUT: ea8300 Radio-1' NA wiphy0,AUTO -1
|
||||
profile_link 1.1 STA-AC 8 'DUT: ea8300 Radio-1' NA wiphy2,AUTO -1
|
||||
profile_link 1.1 STA-AC 8 'DUT: ea8300 Radio-2' NA wiphy1,AUTO -1
|
||||
profile_link 1.1 STA-AC 8 'DUT: ea8300 Radio-3' NA wiphy3,AUTO -1
|
||||
profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1
|
||||
profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 92.168.100.1/24' NA eth3,eth2 -1
|
||||
#profile_link 1.1 STA-AC 1 'DUT: ea8300 Radio-2' NA wiphy4,AUTO -1
|
||||
#profile_link 1.1 STA-AC 1 'DUT: ea8300 Radio-3' NA wiphy5,AUTO -1
|
||||
#profile_link 1.1 STA-AC 1 'DUT: ea8300 Radio-2' NA wiphy6,AUTO -1
|
||||
#profile_link 1.1 STA-AC 1 'DUT: ea8300 Radio-3' NA wiphy7,AUTO -1
|
||||
dut ea8300 393 148
|
||||
dut upstream 306 62
|
||||
resource 1.1 132 218
|
||||
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
# Example test-bed configuration
|
||||
|
||||
# Scripts should source this file to set the default environment variables
|
||||
# and then override the variables specific to their test case (and it can be done
|
||||
# in opposite order for same results
|
||||
#
|
||||
# After the env variables are set,
|
||||
# call the 'lanforge/lanforge-scripts/gui/basic_regression.bash'
|
||||
# from the directory in which it resides.
|
||||
|
||||
PWD=`pwd`
|
||||
AP_SERIAL=${AP_SERIAL:-/dev/ttyUSB0}
|
||||
LF_SERIAL=${LF_SERIAL:-/dev/ttyUSB1}
|
||||
LFPASSWD=${LFPASSWD:-lanforge} # Root password on LANforge machine
|
||||
AP_AUTO_CFG_FILE=${AP_AUTO_CFG_FILE:-$PWD/ap-auto.txt}
|
||||
WCT_CFG_FILE=${WCT_CFG_FILE:-$PWD/wct.txt}
|
||||
DPT_CFG_FILE=${DPT_CFG_FILE:-$PWD/dpt-pkt-sz.txt}
|
||||
SCENARIO_CFG_FILE=${SCENARIO_CFG_FILE:-$PWD/scenario.txt}
|
||||
|
||||
# Default to enable cloud-sdk for this testbed, cloud-sdk is at IP addr below
|
||||
#USE_CLOUD_SDK=${USE_CLOUD_SDK:-192.168.100.164}
|
||||
|
||||
# LANforge target machine
|
||||
LFMANAGER=${LFMANAGER:-192.168.100.209}
|
||||
|
||||
# LANforge GUI machine (may often be same as target)
|
||||
GMANAGER=${GMANAGER:-192.168.100.209}
|
||||
GMPORT=${GMPORT:-3990}
|
||||
MY_TMPDIR=${MY_TMPDIR:-/tmp}
|
||||
|
||||
# Test configuration (10 minutes by default, in interest of time)
|
||||
STABILITY_DURATION=${STABILITY_DURATION:-600}
|
||||
TEST_RIG_ID=${TEST_RIG_ID:-Ferndale-01-Basic}
|
||||
|
||||
# DUT configuration
|
||||
DUT_FLAGS=${DUT_FLAGS:-0x22} # AP, WPA-PSK
|
||||
#DUT_FLAGS=${DUT_FLAGS:-0x2} # AP, Open
|
||||
DUT_FLAGS_MASK=${DUT_FLAGS_MASK:-0xFFFF}
|
||||
DUT_SW_VER=${DUT_SW_VER:-OpenWrt-Stock}
|
||||
DUT_HW_VER=Linksys-EA8300
|
||||
DUT_MODEL=Linksys-EA8300
|
||||
DUT_SERIAL=${DUT_SERIAL:-NA}
|
||||
DUT_SSID1=${DUT_SSID1:-Default-SSID-2g}
|
||||
DUT_SSID2=${DUT_SSID2:-Default-SSID-5gl}
|
||||
DUT_SSID3=${DUT_SSID3:-Default-SSID-5gu}
|
||||
DUT_PASSWD1=${DUT_PASSWD1:-12345678}
|
||||
DUT_PASSWD2=${DUT_PASSWD2:-12345678}
|
||||
DUT_PASSWD3=${DUT_PASSWD3:-12345678}
|
||||
DUT_BSSID1=24:f5:a2:08:21:6c
|
||||
DUT_BSSID2=24:f5:a2:08:21:6d
|
||||
DUT_BSSID3=26:f5:a2:08:21:6e
|
||||
|
||||
export LF_SERIAL AP_SERIAL LFPASSWD
|
||||
export AP_AUTO_CFG_FILE WCT_CFG_FILE DPT_CFG_FILE SCENARIO_CFG_FILE
|
||||
export LFMANAGER GMANAGER GMPORT MY_TMPDIR
|
||||
export STABILITY_DURATION TEST_RIG_ID
|
||||
export DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
export DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
export DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
export DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
export USE_CLOUD_SDK
|
||||
@@ -1,323 +0,0 @@
|
||||
[BLANK]
|
||||
sel_port-0: 1.1.eth2
|
||||
sel_port-1: 1.1.sta00000
|
||||
sel_port-2: 1.1.sta01000
|
||||
sel_port-3: 1.1.sta00500
|
||||
sel_port-4: 1.1.sta01500
|
||||
sel_port-5: 1.1.sta03000
|
||||
sel_port-6: 1.1.sta03500
|
||||
sel_port-7: 1.1.sta04000
|
||||
sel_port-8: 1.1.sta04500
|
||||
sel_port-9: 1.1.sta00001
|
||||
sel_port-10: 1.1.sta01001
|
||||
sel_port-11: 1.1.sta00501
|
||||
sel_port-12: 1.1.sta01501
|
||||
sel_port-13: 1.1.sta00002
|
||||
sel_port-14: 1.1.sta01002
|
||||
sel_port-15: 1.1.sta00502
|
||||
sel_port-16: 1.1.sta01502
|
||||
sel_port-17: 1.1.sta00003
|
||||
sel_port-18: 1.1.sta01003
|
||||
sel_port-19: 1.1.sta00503
|
||||
sel_port-20: 1.1.sta01503
|
||||
sel_port-21: 1.1.sta00004
|
||||
sel_port-22: 1.1.sta01004
|
||||
sel_port-23: 1.1.sta00504
|
||||
sel_port-24: 1.1.sta01504
|
||||
sel_port-25: 1.1.sta00005
|
||||
sel_port-26: 1.1.sta01005
|
||||
sel_port-27: 1.1.sta00505
|
||||
sel_port-28: 1.1.sta01505
|
||||
sel_port-29: 1.1.sta00006
|
||||
sel_port-30: 1.1.sta01006
|
||||
sel_port-31: 1.1.sta00506
|
||||
sel_port-32: 1.1.sta01506
|
||||
sel_port-33: 1.1.sta00007
|
||||
sel_port-34: 1.1.sta01007
|
||||
sel_port-35: 1.1.sta00507
|
||||
sel_port-36: 1.1.sta01507
|
||||
sel_port-37: 1.1.sta00008
|
||||
sel_port-38: 1.1.sta01008
|
||||
sel_port-39: 1.1.sta00508
|
||||
sel_port-40: 1.1.sta01508
|
||||
sel_port-41: 1.1.sta00009
|
||||
sel_port-42: 1.1.sta01009
|
||||
sel_port-43: 1.1.sta00509
|
||||
sel_port-44: 1.1.sta01509
|
||||
sel_port-45: 1.1.sta00010
|
||||
sel_port-46: 1.1.sta01010
|
||||
sel_port-47: 1.1.sta00510
|
||||
sel_port-48: 1.1.sta01510
|
||||
sel_port-49: 1.1.sta00011
|
||||
sel_port-50: 1.1.sta01011
|
||||
sel_port-51: 1.1.sta00511
|
||||
sel_port-52: 1.1.sta01511
|
||||
sel_port-53: 1.1.sta00012
|
||||
sel_port-54: 1.1.sta01012
|
||||
sel_port-55: 1.1.sta00512
|
||||
sel_port-56: 1.1.sta01512
|
||||
sel_port-57: 1.1.sta00013
|
||||
sel_port-58: 1.1.sta01013
|
||||
sel_port-59: 1.1.sta00513
|
||||
sel_port-60: 1.1.sta01513
|
||||
sel_port-61: 1.1.sta00014
|
||||
sel_port-62: 1.1.sta01014
|
||||
sel_port-63: 1.1.sta00514
|
||||
sel_port-64: 1.1.sta01514
|
||||
sel_port-65: 1.1.sta00015
|
||||
sel_port-66: 1.1.sta01015
|
||||
sel_port-67: 1.1.sta00515
|
||||
sel_port-68: 1.1.sta01515
|
||||
sel_port-69: 1.1.sta00016
|
||||
sel_port-70: 1.1.sta01016
|
||||
sel_port-71: 1.1.sta00516
|
||||
sel_port-72: 1.1.sta01516
|
||||
sel_port-73: 1.1.sta00017
|
||||
sel_port-74: 1.1.sta01017
|
||||
sel_port-75: 1.1.sta00517
|
||||
sel_port-76: 1.1.sta01517
|
||||
sel_port-77: 1.1.sta00018
|
||||
sel_port-78: 1.1.sta01018
|
||||
sel_port-79: 1.1.sta00518
|
||||
sel_port-80: 1.1.sta01518
|
||||
sel_port-81: 1.1.sta00019
|
||||
sel_port-82: 1.1.sta01019
|
||||
sel_port-83: 1.1.sta00519
|
||||
sel_port-84: 1.1.sta01519
|
||||
sel_port-85: 1.1.sta00020
|
||||
sel_port-86: 1.1.sta01020
|
||||
sel_port-87: 1.1.sta00520
|
||||
sel_port-88: 1.1.sta01520
|
||||
sel_port-89: 1.1.sta00021
|
||||
sel_port-90: 1.1.sta01021
|
||||
sel_port-91: 1.1.sta00521
|
||||
sel_port-92: 1.1.sta01521
|
||||
sel_port-93: 1.1.sta00022
|
||||
sel_port-94: 1.1.sta01022
|
||||
sel_port-95: 1.1.sta00522
|
||||
sel_port-96: 1.1.sta01522
|
||||
sel_port-97: 1.1.sta00023
|
||||
sel_port-98: 1.1.sta01023
|
||||
sel_port-99: 1.1.sta00523
|
||||
sel_port-100: 1.1.sta01523
|
||||
sel_port-101: 1.1.sta00024
|
||||
sel_port-102: 1.1.sta01024
|
||||
sel_port-103: 1.1.sta00524
|
||||
sel_port-104: 1.1.sta01524
|
||||
sel_port-105: 1.1.sta00025
|
||||
sel_port-106: 1.1.sta01025
|
||||
sel_port-107: 1.1.sta00525
|
||||
sel_port-108: 1.1.sta01525
|
||||
sel_port-109: 1.1.sta00026
|
||||
sel_port-110: 1.1.sta01026
|
||||
sel_port-111: 1.1.sta00526
|
||||
sel_port-112: 1.1.sta01526
|
||||
sel_port-113: 1.1.sta00027
|
||||
sel_port-114: 1.1.sta01027
|
||||
sel_port-115: 1.1.sta00527
|
||||
sel_port-116: 1.1.sta01527
|
||||
sel_port-117: 1.1.sta00028
|
||||
sel_port-118: 1.1.sta01028
|
||||
sel_port-119: 1.1.sta00528
|
||||
sel_port-120: 1.1.sta01528
|
||||
sel_port-121: 1.1.sta00029
|
||||
sel_port-122: 1.1.sta01029
|
||||
sel_port-123: 1.1.sta00529
|
||||
sel_port-124: 1.1.sta01529
|
||||
sel_port-125: 1.1.sta00030
|
||||
sel_port-126: 1.1.sta01030
|
||||
sel_port-127: 1.1.sta00530
|
||||
sel_port-128: 1.1.sta01530
|
||||
sel_port-129: 1.1.sta00031
|
||||
sel_port-130: 1.1.sta01031
|
||||
sel_port-131: 1.1.sta00531
|
||||
sel_port-132: 1.1.sta01531
|
||||
sel_port-133: 1.1.sta00032
|
||||
sel_port-134: 1.1.sta01032
|
||||
sel_port-135: 1.1.sta00532
|
||||
sel_port-136: 1.1.sta01532
|
||||
sel_port-137: 1.1.sta00033
|
||||
sel_port-138: 1.1.sta01033
|
||||
sel_port-139: 1.1.sta00533
|
||||
sel_port-140: 1.1.sta01533
|
||||
sel_port-141: 1.1.sta00034
|
||||
sel_port-142: 1.1.sta01034
|
||||
sel_port-143: 1.1.sta00534
|
||||
sel_port-144: 1.1.sta01534
|
||||
sel_port-145: 1.1.sta00035
|
||||
sel_port-146: 1.1.sta01035
|
||||
sel_port-147: 1.1.sta00535
|
||||
sel_port-148: 1.1.sta01535
|
||||
sel_port-149: 1.1.sta00036
|
||||
sel_port-150: 1.1.sta01036
|
||||
sel_port-151: 1.1.sta00536
|
||||
sel_port-152: 1.1.sta01536
|
||||
sel_port-153: 1.1.sta00037
|
||||
sel_port-154: 1.1.sta01037
|
||||
sel_port-155: 1.1.sta00537
|
||||
sel_port-156: 1.1.sta01537
|
||||
sel_port-157: 1.1.sta00038
|
||||
sel_port-158: 1.1.sta01038
|
||||
sel_port-159: 1.1.sta00538
|
||||
sel_port-160: 1.1.sta01538
|
||||
sel_port-161: 1.1.sta00039
|
||||
sel_port-162: 1.1.sta01039
|
||||
sel_port-163: 1.1.sta00539
|
||||
sel_port-164: 1.1.sta01539
|
||||
sel_port-165: 1.1.sta00040
|
||||
sel_port-166: 1.1.sta01040
|
||||
sel_port-167: 1.1.sta00540
|
||||
sel_port-168: 1.1.sta01540
|
||||
sel_port-169: 1.1.sta00041
|
||||
sel_port-170: 1.1.sta01041
|
||||
sel_port-171: 1.1.sta00541
|
||||
sel_port-172: 1.1.sta01541
|
||||
sel_port-173: 1.1.sta00042
|
||||
sel_port-174: 1.1.sta01042
|
||||
sel_port-175: 1.1.sta00542
|
||||
sel_port-176: 1.1.sta01542
|
||||
sel_port-177: 1.1.sta00043
|
||||
sel_port-178: 1.1.sta01043
|
||||
sel_port-179: 1.1.sta00543
|
||||
sel_port-180: 1.1.sta01543
|
||||
sel_port-181: 1.1.sta00044
|
||||
sel_port-182: 1.1.sta01044
|
||||
sel_port-183: 1.1.sta00544
|
||||
sel_port-184: 1.1.sta01544
|
||||
sel_port-185: 1.1.sta00045
|
||||
sel_port-186: 1.1.sta01045
|
||||
sel_port-187: 1.1.sta00545
|
||||
sel_port-188: 1.1.sta01545
|
||||
sel_port-189: 1.1.sta00046
|
||||
sel_port-190: 1.1.sta01046
|
||||
sel_port-191: 1.1.sta00546
|
||||
sel_port-192: 1.1.sta01546
|
||||
sel_port-193: 1.1.sta00047
|
||||
sel_port-194: 1.1.sta01047
|
||||
sel_port-195: 1.1.sta00547
|
||||
sel_port-196: 1.1.sta01547
|
||||
sel_port-197: 1.1.sta00048
|
||||
sel_port-198: 1.1.sta01048
|
||||
sel_port-199: 1.1.sta00548
|
||||
sel_port-200: 1.1.sta01548
|
||||
sel_port-201: 1.1.sta00049
|
||||
sel_port-202: 1.1.sta01049
|
||||
sel_port-203: 1.1.sta00549
|
||||
sel_port-204: 1.1.sta01549
|
||||
sel_port-205: 1.1.sta00050
|
||||
sel_port-206: 1.1.sta01050
|
||||
sel_port-207: 1.1.sta00550
|
||||
sel_port-208: 1.1.sta01550
|
||||
sel_port-209: 1.1.sta00051
|
||||
sel_port-210: 1.1.sta01051
|
||||
sel_port-211: 1.1.sta00551
|
||||
sel_port-212: 1.1.sta01551
|
||||
sel_port-213: 1.1.sta00052
|
||||
sel_port-214: 1.1.sta01052
|
||||
sel_port-215: 1.1.sta00552
|
||||
sel_port-216: 1.1.sta01552
|
||||
sel_port-217: 1.1.sta00053
|
||||
sel_port-218: 1.1.sta01053
|
||||
sel_port-219: 1.1.sta00553
|
||||
sel_port-220: 1.1.sta01553
|
||||
sel_port-221: 1.1.sta00054
|
||||
sel_port-222: 1.1.sta01054
|
||||
sel_port-223: 1.1.sta00554
|
||||
sel_port-224: 1.1.sta01554
|
||||
sel_port-225: 1.1.sta00055
|
||||
sel_port-226: 1.1.sta01055
|
||||
sel_port-227: 1.1.sta00555
|
||||
sel_port-228: 1.1.sta01555
|
||||
sel_port-229: 1.1.sta00056
|
||||
sel_port-230: 1.1.sta01056
|
||||
sel_port-231: 1.1.sta00556
|
||||
sel_port-232: 1.1.sta01556
|
||||
sel_port-233: 1.1.sta00057
|
||||
sel_port-234: 1.1.sta01057
|
||||
sel_port-235: 1.1.sta00557
|
||||
sel_port-236: 1.1.sta01557
|
||||
sel_port-237: 1.1.sta00058
|
||||
sel_port-238: 1.1.sta01058
|
||||
sel_port-239: 1.1.sta00558
|
||||
sel_port-240: 1.1.sta01558
|
||||
sel_port-241: 1.1.sta00059
|
||||
sel_port-242: 1.1.sta01059
|
||||
sel_port-243: 1.1.sta00559
|
||||
sel_port-244: 1.1.sta01559
|
||||
sel_port-245: 1.1.sta00060
|
||||
sel_port-246: 1.1.sta01060
|
||||
sel_port-247: 1.1.sta00560
|
||||
sel_port-248: 1.1.sta01560
|
||||
sel_port-249: 1.1.sta00061
|
||||
sel_port-250: 1.1.sta01061
|
||||
sel_port-251: 1.1.sta00561
|
||||
sel_port-252: 1.1.sta01561
|
||||
sel_port-253: 1.1.sta00062
|
||||
sel_port-254: 1.1.sta01062
|
||||
sel_port-255: 1.1.sta00562
|
||||
sel_port-256: 1.1.sta01562
|
||||
sel_port-257: 1.1.sta00063
|
||||
sel_port-258: 1.1.sta01063
|
||||
sel_port-259: 1.1.sta00563
|
||||
sel_port-260: 1.1.sta01563
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 2
|
||||
kpi_id: WiFi Capacity
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 1
|
||||
skip_2: 0
|
||||
skip_5: 0
|
||||
batch_size: 1,5,10,20,40,80
|
||||
loop_iter: 1
|
||||
duration: 30000
|
||||
test_groups: 0
|
||||
test_groups_subset: 0
|
||||
protocol: TCP-IPv4
|
||||
dl_rate_sel: Total Download Rate:
|
||||
dl_rate: 1000000000
|
||||
ul_rate_sel: Total Upload Rate:
|
||||
ul_rate: 1000000000
|
||||
prcnt_tcp: 100000
|
||||
l4_endp:
|
||||
pdu_sz: -1
|
||||
mss_sel: 1
|
||||
sock_buffer: 0
|
||||
ip_tos: 0
|
||||
multi_conn: -1
|
||||
min_speed: -1
|
||||
ps_interval: 60-second Running Average
|
||||
fairness: 0
|
||||
naptime: 0
|
||||
before_clear: 5000
|
||||
rpt_timer: 1000
|
||||
try_lower: 0
|
||||
rnd_rate: 1
|
||||
leave_ports_up: 0
|
||||
down_quiesce: 0
|
||||
udp_nat: 1
|
||||
record_other_ssids: 0
|
||||
clear_reset_counters: 0
|
||||
do_pf: 0
|
||||
pf_min_period_dl: 128000
|
||||
pf_min_period_ul: 0
|
||||
pf_max_reconnects: 0
|
||||
use_mix_pdu: 0
|
||||
pdu_prcnt_pps: 1
|
||||
pdu_prcnt_bps: 0
|
||||
pdu_mix_ln-0:
|
||||
show_scan: 1
|
||||
show_golden_3p: 0
|
||||
save_csv: 0
|
||||
show_realtime: 1
|
||||
show_pie: 1
|
||||
show_per_loop_totals: 1
|
||||
show_cx_time: 1
|
||||
show_dhcp: 1
|
||||
show_anqp: 1
|
||||
show_4way: 1
|
||||
show_latency: 1
|
||||
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
|
||||
DUT is an Edge-Core 5410, running TIP OpenWrt.
|
||||
@@ -1,32 +0,0 @@
|
||||
config wifi-device 'radio0'
|
||||
option type 'mac80211'
|
||||
option channel '36'
|
||||
option hwmode '11a'
|
||||
option path 'soc/1b700000.pci/pci0001:00/0001:00:00.0/0001:01:00.0'
|
||||
option htmode 'VHT80'
|
||||
option disabled '0'
|
||||
|
||||
config wifi-iface 'default_radio0'
|
||||
option device 'radio0'
|
||||
option network 'lan'
|
||||
option mode 'ap'
|
||||
option ssid 'Default-SSID-5gl'
|
||||
option encryption 'psk-mixed'
|
||||
option key '12345678'
|
||||
|
||||
config wifi-device 'radio1'
|
||||
option type 'mac80211'
|
||||
option channel '11'
|
||||
option hwmode '11g'
|
||||
option path 'soc/1b900000.pci/pci0002:00/0002:00:00.0/0002:01:00.0'
|
||||
option htmode 'HT20'
|
||||
option disabled '0'
|
||||
|
||||
config wifi-iface 'default_radio1'
|
||||
option device 'radio1'
|
||||
option network 'lan'
|
||||
option mode 'ap'
|
||||
option ssid 'Default-SSID-2g'
|
||||
option encryption 'psk-mixed'
|
||||
option key '12345678'
|
||||
|
||||
@@ -1,111 +0,0 @@
|
||||
[BLANK]
|
||||
sel_port-0: 1.1.sta00500
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 0
|
||||
kpi_id: AP Auto
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 1
|
||||
skip_2: 1
|
||||
skip_5: 1
|
||||
dut5b-0: NA
|
||||
dut5-0: ecw5410 Default-SSID-5gl
|
||||
dut2-0: ecw5410 Default-SSID-2g
|
||||
dut5b-1: NA
|
||||
dut5-1: NA
|
||||
dut2-1: NA
|
||||
dut5b-2: NA
|
||||
dut5-2: NA
|
||||
dut2-2: NA
|
||||
spatial_streams: AUTO
|
||||
bandw_options: AUTO
|
||||
modes: Auto
|
||||
upstream_port: 1.1.2 eth2
|
||||
operator:
|
||||
mconn: 1
|
||||
tos: 0
|
||||
vid_buf: 1000000
|
||||
vid_speed: 700000
|
||||
reset_stall_thresh_udp_dl: 9600
|
||||
reset_stall_thresh_udp_ul: 9600
|
||||
reset_stall_thresh_tcp_dl: 9600
|
||||
reset_stall_thresh_tcp_ul: 9600
|
||||
reset_stall_thresh_l4: 100000
|
||||
reset_stall_thresh_voip: 20000
|
||||
stab_udp_dl_min: 56000
|
||||
stab_udp_dl_max: 0
|
||||
stab_udp_ul_min: 56000
|
||||
stab_udp_ul_max: 0
|
||||
stab_tcp_dl_min: 500000
|
||||
stab_tcp_dl_max: 0
|
||||
stab_tcp_ul_min: 500000
|
||||
stab_tcp_ul_max: 0
|
||||
dl_speed: 85%
|
||||
ul_speed: 85%
|
||||
max_stations_2: 66
|
||||
max_stations_5: 66
|
||||
max_stations_dual: 132
|
||||
lt_sta: 2
|
||||
voip_calls: 0
|
||||
lt_dur: 3600
|
||||
reset_dur: 600
|
||||
lt_gi: 30
|
||||
dur20: 20
|
||||
hunt_retries: 1
|
||||
cap_dl: 1
|
||||
cap_ul: 0
|
||||
cap_use_pkt_sizes: 0
|
||||
stability_reset_radios: 0
|
||||
pkt_loss_thresh: 10000
|
||||
frame_sizes: 200, 512, 1024, MTU
|
||||
capacities: 1, 2, 5, 10, 20, 40, 64, 128, 256, 512, 1024, MAX
|
||||
radio2-0: 1.1.4 wiphy0
|
||||
radio2-1: 1.1.6 wiphy2
|
||||
radio2-2: 1.1.8 wiphy4
|
||||
radio5-0: 1.1.5 wiphy1
|
||||
radio5-1: 1.1.7 wiphy3
|
||||
radio5-2: 1.1.9 wiphy5
|
||||
radio5-3:
|
||||
radio5-4:
|
||||
radio5-5:
|
||||
basic_cx: 1
|
||||
tput: 0
|
||||
dual_band_tput: 0
|
||||
capacity: 0
|
||||
longterm: 0
|
||||
mix_stability: 0
|
||||
loop_iter: 1
|
||||
reset_batch_size: 1
|
||||
reset_duration_min: 10000
|
||||
reset_duration_max: 60000
|
||||
|
||||
# Configure pass/fail metrics for this testbed.
|
||||
pf_text0: 2.4 DL 200 70Mbps
|
||||
pf_text1: 2.4 DL 512 110Mbps
|
||||
pf_text2: 2.4 DL 1024 115Mbps
|
||||
pf_text3: 2.4 DL MTU 120Mbps
|
||||
pf_text4:
|
||||
pf_text5: 2.4 UL 200 88Mbps
|
||||
pf_text6: 2.4 UL 512 106Mbps
|
||||
pf_text7: 2.4 UL 1024 115Mbps
|
||||
pf_text8: 2.4 UL MTU 120Mbps
|
||||
pf_text9:
|
||||
pf_text10: 5 DL 200 72Mbps
|
||||
pf_text11: 5 DL 512 185Mbps
|
||||
pf_text12: 5 DL 1024 370Mbps
|
||||
pf_text13: 5 DL MTU 525Mbps
|
||||
pf_text14:
|
||||
pf_text15: 5 UL 200 90Mbps
|
||||
pf_text16: 5 UL 512 230Mbps
|
||||
pf_text17: 5 UL 1024 450Mbps
|
||||
pf_text18: 5 UL MTU 630Mbps
|
||||
|
||||
# Tune connect-time thresholds.
|
||||
cx_prcnt: 950000
|
||||
cx_open_thresh: 35
|
||||
cx_psk_thresh: 75
|
||||
cx_1x_thresh: 130
|
||||
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
[BLANK]
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 0
|
||||
kpi_id: Dataplane
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 0
|
||||
skip_2: 0
|
||||
skip_5: 0
|
||||
selected_dut: ecw5410
|
||||
duration: 15000
|
||||
traffic_port: 1.1.136 sta00500
|
||||
upstream_port: 1.1.2 eth2
|
||||
path_loss: 10
|
||||
speed: 85%
|
||||
speed2: 0Kbps
|
||||
min_rssi_bound: -150
|
||||
max_rssi_bound: 0
|
||||
channels: AUTO
|
||||
modes: Auto
|
||||
pkts: 60;142;256;512;1024;MTU;4000
|
||||
spatial_streams: AUTO
|
||||
security_options: AUTO
|
||||
bandw_options: AUTO
|
||||
traffic_types: UDP
|
||||
directions: DUT Transmit;DUT Receive
|
||||
txo_preamble: OFDM
|
||||
txo_mcs: 0 CCK, OFDM, HT, VHT
|
||||
txo_retries: No Retry
|
||||
txo_sgi: OFF
|
||||
txo_txpower: 15
|
||||
attenuator: 0
|
||||
attenuator2: 0
|
||||
attenuator_mod: 255
|
||||
attenuator_mod2: 255
|
||||
attenuations: 0..+50..950
|
||||
attenuations2: 0..+50..950
|
||||
chamber: 0
|
||||
tt_deg: 0..+45..359
|
||||
cust_pkt_sz:
|
||||
show_3s: 0
|
||||
show_ll_graphs: 1
|
||||
show_gp_graphs: 1
|
||||
show_1m: 1
|
||||
pause_iter: 0
|
||||
show_realtime: 1
|
||||
operator:
|
||||
mconn: 1
|
||||
mpkt: 1000
|
||||
tos: 0
|
||||
loop_iterations: 1
|
||||
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Example usage of this script
|
||||
# DUT_SW_VER=my-build-id ./run_basic.bash
|
||||
#
|
||||
# Other DUT variables in test_bed_cfg.bash may also be over-ridden,
|
||||
# including those below. See LANforge 'add_dut' CLI command for
|
||||
# details on what these variables are for.
|
||||
|
||||
# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
|
||||
# Source config file
|
||||
. test_bed_cfg.bash
|
||||
|
||||
echo "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
|
||||
git log -n 8 --oneline >> ./tmp_gitlog.html
|
||||
echo "</pre>" >> ./tmp_gitlog.html
|
||||
|
||||
NOTES_HTML=`pwd`/testbed_notes.html
|
||||
GITLOG=`pwd`/tmp_gitlog.html
|
||||
|
||||
if [ -d "../../../wlan-ap" ]
|
||||
then
|
||||
DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html
|
||||
echo "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
|
||||
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
|
||||
echo "</pre>" >> $DUTGITLOG
|
||||
export DUTGITLOG
|
||||
fi
|
||||
export NOTES_HTML GITLOG
|
||||
|
||||
# TODO: Copy config file to cloud controller and restart it
|
||||
# and/or do other config to make it work.
|
||||
|
||||
# Change to scripts dir
|
||||
cd ../../lanforge/lanforge-scripts/gui
|
||||
|
||||
# Where to place results. basic_regression.bash will use this variable.
|
||||
RSLTS_DIR=/tmp/nola-01-basic-regression
|
||||
export RSLTS_DIR
|
||||
|
||||
# Clean any existing data from the results dir
|
||||
rm -fr $RSLTS_DIR
|
||||
|
||||
# Run one test
|
||||
# DEFAULT_ENABLE=0 DO_SHORT_AP_STABILITY_RESET=1 ./basic_regression.bash
|
||||
|
||||
# Clean up old DHCP leases
|
||||
../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases"
|
||||
|
||||
# Run all tests
|
||||
./basic_regression.bash
|
||||
|
||||
cd -
|
||||
|
||||
if [ ! -d $RSLTS_DIR ]
|
||||
then
|
||||
echo "Test did not run as expected, $RSLTS_DIR not found."
|
||||
mkdir -p $RSLTS_DIR
|
||||
fi
|
||||
|
||||
if [ -f ${MY_TMPDIR}/basic_regression_log.txt ]
|
||||
then
|
||||
echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR"
|
||||
mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/
|
||||
fi
|
||||
|
||||
echo "See results in $RSLTS_DIR"
|
||||
@@ -1,83 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Example usage of this script
|
||||
# DUT_SW_VER=my-build-id ./run_basic.bash
|
||||
#
|
||||
# Other DUT variables in test_bed_cfg.bash may also be over-ridden,
|
||||
# including those below. See LANforge 'add_dut' CLI command for
|
||||
# details on what these variables are for.
|
||||
|
||||
# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
|
||||
#set -x
|
||||
|
||||
DO_SHORT_AP_BASIC_CX=${DO_SHORT_AP_BASIC_CX:-1}
|
||||
DO_WCT_BI=${DO_WCT_BI:-1}
|
||||
|
||||
export DO_SHORT_AP_BASI_CX DO_WCT_BI
|
||||
|
||||
# Source config file
|
||||
. test_bed_cfg.bash
|
||||
|
||||
echo "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
|
||||
git log -n 8 --oneline >> ./tmp_gitlog.html
|
||||
echo "</pre>" >> ./tmp_gitlog.html
|
||||
|
||||
NOTES_HTML=`pwd`/testbed_notes.html
|
||||
GITLOG=`pwd`/tmp_gitlog.html
|
||||
|
||||
if [ -d "../../../wlan-ap" ]
|
||||
then
|
||||
DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html
|
||||
echo "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
|
||||
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
|
||||
echo "</pre>" >> $DUTGITLOG
|
||||
export DUTGITLOG
|
||||
fi
|
||||
export NOTES_HTML GITLOG
|
||||
|
||||
# TODO: Copy config file to cloud controller and restart it
|
||||
# and/or do other config to make it work.
|
||||
|
||||
# Change to scripts dir
|
||||
cd ../../lanforge/lanforge-scripts/gui
|
||||
|
||||
# Where to place results. basic_regression.bash will use this variable.
|
||||
RSLTS_DIR=/tmp/nola-01-basic-regression-fast
|
||||
export RSLTS_DIR
|
||||
|
||||
# Clean any existing data from the results dir
|
||||
rm -fr $RSLTS_DIR
|
||||
|
||||
# Clean up old DHCP leases
|
||||
../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases"
|
||||
|
||||
# Run a subset of available tests
|
||||
# See 'Tests to run' comment in basic_regression.bash for available options.
|
||||
|
||||
#DEFAULT_ENABLE=0 WCT_DURATION=20s DO_SHORT_AP_BASIC_CX=1 DO_WCT_BI=1 ./basic_regression.bash
|
||||
|
||||
DEFAULT_ENABLE=0 WCT_DURATION=20s ./basic_regression.bash
|
||||
|
||||
|
||||
# Run all tests
|
||||
#./basic_regression.bash
|
||||
|
||||
cd -
|
||||
|
||||
if [ ! -d $RSLTS_DIR ]
|
||||
then
|
||||
echo "Test did not run as expected, $RSLTS_DIR not found."
|
||||
mkdir -p $RSLTS_DIR
|
||||
fi
|
||||
|
||||
if [ -f ${MY_TMPDIR}/basic_regression_log.txt ]
|
||||
then
|
||||
echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR"
|
||||
mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/
|
||||
fi
|
||||
|
||||
echo "See results in $RSLTS_DIR"
|
||||
@@ -1,13 +0,0 @@
|
||||
profile_link 1.1 STA-AC 64 'DUT: ecw5410 Radio-1' NA wiphy4,AUTO -1
|
||||
profile_link 1.1 STA-AC 64 'DUT: ecw5410 Radio-2' NA wiphy5,AUTO -1
|
||||
profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1
|
||||
profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 100.97.39.129/25' NA eth3,eth2 -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy0,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy1,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy2,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy3,AUTO -1
|
||||
dut ecw5410 393 148
|
||||
dut upstream 306 62
|
||||
resource 1.1 132 218
|
||||
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
profile_link 1.1 STA-AC 24 'DUT: ecw5410 Radio-1' NA wiphy4,AUTO -1
|
||||
profile_link 1.1 STA-AC 24 'DUT: ecw5410 Radio-2' NA wiphy5,AUTO -1
|
||||
profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1
|
||||
profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 100.97.39.129/25' NA eth3,eth2 -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy0,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy1,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy2,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy3,AUTO -1
|
||||
dut ecw5410 393 148
|
||||
dut upstream 306 62
|
||||
resource 1.1 132 218
|
||||
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
# Example test-bed configuration
|
||||
|
||||
# Scripts should source this file to set the default environment variables
|
||||
# and then override the variables specific to their test case (and it can be done
|
||||
# in opposite order for same results
|
||||
#
|
||||
# After the env variables are set,
|
||||
# call the 'lanforge/lanforge-scripts/gui/basic_regression.bash'
|
||||
# from the directory in which it resides.
|
||||
|
||||
PWD=`pwd`
|
||||
AP_SERIAL=${AP_SERIAL:-/dev/ttyAP1}
|
||||
LF_SERIAL=${LF_SERIAL:-/dev/ttyLF1}
|
||||
LFPASSWD=${LFPASSWD:-lanforge} # Root password on LANforge machine
|
||||
AP_AUTO_CFG_FILE=${AP_AUTO_CFG_FILE:-$PWD/ap-auto.txt}
|
||||
WCT_CFG_FILE=${WCT_CFG_FILE:-$PWD/wct.txt}
|
||||
DPT_CFG_FILE=${DPT_CFG_FILE:-$PWD/dpt-pkt-sz.txt}
|
||||
SCENARIO_CFG_FILE=${SCENARIO_CFG_FILE:-$PWD/scenario.txt}
|
||||
|
||||
# Default to enable cloud-sdk for this testbed, cloud-sdk is at IP addr below
|
||||
#USE_CLOUD_SDK=${USE_CLOUD_SDK:-192.168.100.164}
|
||||
|
||||
# LANforge target machine
|
||||
LFMANAGER=${LFMANAGER:-lf1}
|
||||
|
||||
# LANforge GUI machine (may often be same as target)
|
||||
GMANAGER=${GMANAGER:-lf1}
|
||||
GMPORT=${GMPORT:-3990}
|
||||
MY_TMPDIR=${MY_TMPDIR:-/tmp}
|
||||
|
||||
# Test configuration (10 minutes by default, in interest of time)
|
||||
STABILITY_DURATION=${STABILITY_DURATION:-600}
|
||||
TEST_RIG_ID=${TEST_RIG_ID:-NOLA-01-Basic}
|
||||
|
||||
# DUT configuration
|
||||
DUT_FLAGS=${DUT_FLAGS:-0x22} # AP, WPA-PSK
|
||||
#DUT_FLAGS=${DUT_FLAGS:-0x2} # AP, Open
|
||||
DUT_FLAGS_MASK=${DUT_FLAGS_MASK:-0xFFFF}
|
||||
DUT_SW_VER=${DUT_SW_VER:-OpenWrt-TIP}
|
||||
DUT_HW_VER=Edgecore-ECW5410
|
||||
DUT_MODEL=Edgecore-ECW5410
|
||||
DUT_SERIAL=${DUT_SERIAL:-NA}
|
||||
DUT_SSID1=${DUT_SSID1:-Default-SSID-2g}
|
||||
DUT_SSID2=${DUT_SSID2:-Default-SSID-5gl}
|
||||
DUT_PASSWD1=${DUT_PASSWD1:-12345678}
|
||||
DUT_PASSWD2=${DUT_PASSWD2:-12345678}
|
||||
# 2.4 radio
|
||||
DUT_BSSID1=3C:2C:99:F4:4E:78
|
||||
# 5Ghz radio
|
||||
DUT_BSSID2=3C:2C:99:F4:4E:79
|
||||
|
||||
export LF_SERIAL AP_SERIAL LFPASSWD
|
||||
export AP_AUTO_CFG_FILE WCT_CFG_FILE DPT_CFG_FILE SCENARIO_CFG_FILE
|
||||
export LFMANAGER GMANAGER GMPORT MY_TMPDIR
|
||||
export STABILITY_DURATION TEST_RIG_ID
|
||||
export DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
export DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
export DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
export DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
export USE_CLOUD_SDK
|
||||
@@ -1,323 +0,0 @@
|
||||
[BLANK]
|
||||
sel_port-0: 1.1.eth2
|
||||
sel_port-1: 1.1.sta00000
|
||||
sel_port-2: 1.1.sta01000
|
||||
sel_port-3: 1.1.sta00500
|
||||
sel_port-4: 1.1.sta01500
|
||||
sel_port-5: 1.1.sta03000
|
||||
sel_port-6: 1.1.sta03500
|
||||
sel_port-7: 1.1.sta04000
|
||||
sel_port-8: 1.1.sta04500
|
||||
sel_port-9: 1.1.sta00001
|
||||
sel_port-10: 1.1.sta01001
|
||||
sel_port-11: 1.1.sta00501
|
||||
sel_port-12: 1.1.sta01501
|
||||
sel_port-13: 1.1.sta00002
|
||||
sel_port-14: 1.1.sta01002
|
||||
sel_port-15: 1.1.sta00502
|
||||
sel_port-16: 1.1.sta01502
|
||||
sel_port-17: 1.1.sta00003
|
||||
sel_port-18: 1.1.sta01003
|
||||
sel_port-19: 1.1.sta00503
|
||||
sel_port-20: 1.1.sta01503
|
||||
sel_port-21: 1.1.sta00004
|
||||
sel_port-22: 1.1.sta01004
|
||||
sel_port-23: 1.1.sta00504
|
||||
sel_port-24: 1.1.sta01504
|
||||
sel_port-25: 1.1.sta00005
|
||||
sel_port-26: 1.1.sta01005
|
||||
sel_port-27: 1.1.sta00505
|
||||
sel_port-28: 1.1.sta01505
|
||||
sel_port-29: 1.1.sta00006
|
||||
sel_port-30: 1.1.sta01006
|
||||
sel_port-31: 1.1.sta00506
|
||||
sel_port-32: 1.1.sta01506
|
||||
sel_port-33: 1.1.sta00007
|
||||
sel_port-34: 1.1.sta01007
|
||||
sel_port-35: 1.1.sta00507
|
||||
sel_port-36: 1.1.sta01507
|
||||
sel_port-37: 1.1.sta00008
|
||||
sel_port-38: 1.1.sta01008
|
||||
sel_port-39: 1.1.sta00508
|
||||
sel_port-40: 1.1.sta01508
|
||||
sel_port-41: 1.1.sta00009
|
||||
sel_port-42: 1.1.sta01009
|
||||
sel_port-43: 1.1.sta00509
|
||||
sel_port-44: 1.1.sta01509
|
||||
sel_port-45: 1.1.sta00010
|
||||
sel_port-46: 1.1.sta01010
|
||||
sel_port-47: 1.1.sta00510
|
||||
sel_port-48: 1.1.sta01510
|
||||
sel_port-49: 1.1.sta00011
|
||||
sel_port-50: 1.1.sta01011
|
||||
sel_port-51: 1.1.sta00511
|
||||
sel_port-52: 1.1.sta01511
|
||||
sel_port-53: 1.1.sta00012
|
||||
sel_port-54: 1.1.sta01012
|
||||
sel_port-55: 1.1.sta00512
|
||||
sel_port-56: 1.1.sta01512
|
||||
sel_port-57: 1.1.sta00013
|
||||
sel_port-58: 1.1.sta01013
|
||||
sel_port-59: 1.1.sta00513
|
||||
sel_port-60: 1.1.sta01513
|
||||
sel_port-61: 1.1.sta00014
|
||||
sel_port-62: 1.1.sta01014
|
||||
sel_port-63: 1.1.sta00514
|
||||
sel_port-64: 1.1.sta01514
|
||||
sel_port-65: 1.1.sta00015
|
||||
sel_port-66: 1.1.sta01015
|
||||
sel_port-67: 1.1.sta00515
|
||||
sel_port-68: 1.1.sta01515
|
||||
sel_port-69: 1.1.sta00016
|
||||
sel_port-70: 1.1.sta01016
|
||||
sel_port-71: 1.1.sta00516
|
||||
sel_port-72: 1.1.sta01516
|
||||
sel_port-73: 1.1.sta00017
|
||||
sel_port-74: 1.1.sta01017
|
||||
sel_port-75: 1.1.sta00517
|
||||
sel_port-76: 1.1.sta01517
|
||||
sel_port-77: 1.1.sta00018
|
||||
sel_port-78: 1.1.sta01018
|
||||
sel_port-79: 1.1.sta00518
|
||||
sel_port-80: 1.1.sta01518
|
||||
sel_port-81: 1.1.sta00019
|
||||
sel_port-82: 1.1.sta01019
|
||||
sel_port-83: 1.1.sta00519
|
||||
sel_port-84: 1.1.sta01519
|
||||
sel_port-85: 1.1.sta00020
|
||||
sel_port-86: 1.1.sta01020
|
||||
sel_port-87: 1.1.sta00520
|
||||
sel_port-88: 1.1.sta01520
|
||||
sel_port-89: 1.1.sta00021
|
||||
sel_port-90: 1.1.sta01021
|
||||
sel_port-91: 1.1.sta00521
|
||||
sel_port-92: 1.1.sta01521
|
||||
sel_port-93: 1.1.sta00022
|
||||
sel_port-94: 1.1.sta01022
|
||||
sel_port-95: 1.1.sta00522
|
||||
sel_port-96: 1.1.sta01522
|
||||
sel_port-97: 1.1.sta00023
|
||||
sel_port-98: 1.1.sta01023
|
||||
sel_port-99: 1.1.sta00523
|
||||
sel_port-100: 1.1.sta01523
|
||||
sel_port-101: 1.1.sta00024
|
||||
sel_port-102: 1.1.sta01024
|
||||
sel_port-103: 1.1.sta00524
|
||||
sel_port-104: 1.1.sta01524
|
||||
sel_port-105: 1.1.sta00025
|
||||
sel_port-106: 1.1.sta01025
|
||||
sel_port-107: 1.1.sta00525
|
||||
sel_port-108: 1.1.sta01525
|
||||
sel_port-109: 1.1.sta00026
|
||||
sel_port-110: 1.1.sta01026
|
||||
sel_port-111: 1.1.sta00526
|
||||
sel_port-112: 1.1.sta01526
|
||||
sel_port-113: 1.1.sta00027
|
||||
sel_port-114: 1.1.sta01027
|
||||
sel_port-115: 1.1.sta00527
|
||||
sel_port-116: 1.1.sta01527
|
||||
sel_port-117: 1.1.sta00028
|
||||
sel_port-118: 1.1.sta01028
|
||||
sel_port-119: 1.1.sta00528
|
||||
sel_port-120: 1.1.sta01528
|
||||
sel_port-121: 1.1.sta00029
|
||||
sel_port-122: 1.1.sta01029
|
||||
sel_port-123: 1.1.sta00529
|
||||
sel_port-124: 1.1.sta01529
|
||||
sel_port-125: 1.1.sta00030
|
||||
sel_port-126: 1.1.sta01030
|
||||
sel_port-127: 1.1.sta00530
|
||||
sel_port-128: 1.1.sta01530
|
||||
sel_port-129: 1.1.sta00031
|
||||
sel_port-130: 1.1.sta01031
|
||||
sel_port-131: 1.1.sta00531
|
||||
sel_port-132: 1.1.sta01531
|
||||
sel_port-133: 1.1.sta00032
|
||||
sel_port-134: 1.1.sta01032
|
||||
sel_port-135: 1.1.sta00532
|
||||
sel_port-136: 1.1.sta01532
|
||||
sel_port-137: 1.1.sta00033
|
||||
sel_port-138: 1.1.sta01033
|
||||
sel_port-139: 1.1.sta00533
|
||||
sel_port-140: 1.1.sta01533
|
||||
sel_port-141: 1.1.sta00034
|
||||
sel_port-142: 1.1.sta01034
|
||||
sel_port-143: 1.1.sta00534
|
||||
sel_port-144: 1.1.sta01534
|
||||
sel_port-145: 1.1.sta00035
|
||||
sel_port-146: 1.1.sta01035
|
||||
sel_port-147: 1.1.sta00535
|
||||
sel_port-148: 1.1.sta01535
|
||||
sel_port-149: 1.1.sta00036
|
||||
sel_port-150: 1.1.sta01036
|
||||
sel_port-151: 1.1.sta00536
|
||||
sel_port-152: 1.1.sta01536
|
||||
sel_port-153: 1.1.sta00037
|
||||
sel_port-154: 1.1.sta01037
|
||||
sel_port-155: 1.1.sta00537
|
||||
sel_port-156: 1.1.sta01537
|
||||
sel_port-157: 1.1.sta00038
|
||||
sel_port-158: 1.1.sta01038
|
||||
sel_port-159: 1.1.sta00538
|
||||
sel_port-160: 1.1.sta01538
|
||||
sel_port-161: 1.1.sta00039
|
||||
sel_port-162: 1.1.sta01039
|
||||
sel_port-163: 1.1.sta00539
|
||||
sel_port-164: 1.1.sta01539
|
||||
sel_port-165: 1.1.sta00040
|
||||
sel_port-166: 1.1.sta01040
|
||||
sel_port-167: 1.1.sta00540
|
||||
sel_port-168: 1.1.sta01540
|
||||
sel_port-169: 1.1.sta00041
|
||||
sel_port-170: 1.1.sta01041
|
||||
sel_port-171: 1.1.sta00541
|
||||
sel_port-172: 1.1.sta01541
|
||||
sel_port-173: 1.1.sta00042
|
||||
sel_port-174: 1.1.sta01042
|
||||
sel_port-175: 1.1.sta00542
|
||||
sel_port-176: 1.1.sta01542
|
||||
sel_port-177: 1.1.sta00043
|
||||
sel_port-178: 1.1.sta01043
|
||||
sel_port-179: 1.1.sta00543
|
||||
sel_port-180: 1.1.sta01543
|
||||
sel_port-181: 1.1.sta00044
|
||||
sel_port-182: 1.1.sta01044
|
||||
sel_port-183: 1.1.sta00544
|
||||
sel_port-184: 1.1.sta01544
|
||||
sel_port-185: 1.1.sta00045
|
||||
sel_port-186: 1.1.sta01045
|
||||
sel_port-187: 1.1.sta00545
|
||||
sel_port-188: 1.1.sta01545
|
||||
sel_port-189: 1.1.sta00046
|
||||
sel_port-190: 1.1.sta01046
|
||||
sel_port-191: 1.1.sta00546
|
||||
sel_port-192: 1.1.sta01546
|
||||
sel_port-193: 1.1.sta00047
|
||||
sel_port-194: 1.1.sta01047
|
||||
sel_port-195: 1.1.sta00547
|
||||
sel_port-196: 1.1.sta01547
|
||||
sel_port-197: 1.1.sta00048
|
||||
sel_port-198: 1.1.sta01048
|
||||
sel_port-199: 1.1.sta00548
|
||||
sel_port-200: 1.1.sta01548
|
||||
sel_port-201: 1.1.sta00049
|
||||
sel_port-202: 1.1.sta01049
|
||||
sel_port-203: 1.1.sta00549
|
||||
sel_port-204: 1.1.sta01549
|
||||
sel_port-205: 1.1.sta00050
|
||||
sel_port-206: 1.1.sta01050
|
||||
sel_port-207: 1.1.sta00550
|
||||
sel_port-208: 1.1.sta01550
|
||||
sel_port-209: 1.1.sta00051
|
||||
sel_port-210: 1.1.sta01051
|
||||
sel_port-211: 1.1.sta00551
|
||||
sel_port-212: 1.1.sta01551
|
||||
sel_port-213: 1.1.sta00052
|
||||
sel_port-214: 1.1.sta01052
|
||||
sel_port-215: 1.1.sta00552
|
||||
sel_port-216: 1.1.sta01552
|
||||
sel_port-217: 1.1.sta00053
|
||||
sel_port-218: 1.1.sta01053
|
||||
sel_port-219: 1.1.sta00553
|
||||
sel_port-220: 1.1.sta01553
|
||||
sel_port-221: 1.1.sta00054
|
||||
sel_port-222: 1.1.sta01054
|
||||
sel_port-223: 1.1.sta00554
|
||||
sel_port-224: 1.1.sta01554
|
||||
sel_port-225: 1.1.sta00055
|
||||
sel_port-226: 1.1.sta01055
|
||||
sel_port-227: 1.1.sta00555
|
||||
sel_port-228: 1.1.sta01555
|
||||
sel_port-229: 1.1.sta00056
|
||||
sel_port-230: 1.1.sta01056
|
||||
sel_port-231: 1.1.sta00556
|
||||
sel_port-232: 1.1.sta01556
|
||||
sel_port-233: 1.1.sta00057
|
||||
sel_port-234: 1.1.sta01057
|
||||
sel_port-235: 1.1.sta00557
|
||||
sel_port-236: 1.1.sta01557
|
||||
sel_port-237: 1.1.sta00058
|
||||
sel_port-238: 1.1.sta01058
|
||||
sel_port-239: 1.1.sta00558
|
||||
sel_port-240: 1.1.sta01558
|
||||
sel_port-241: 1.1.sta00059
|
||||
sel_port-242: 1.1.sta01059
|
||||
sel_port-243: 1.1.sta00559
|
||||
sel_port-244: 1.1.sta01559
|
||||
sel_port-245: 1.1.sta00060
|
||||
sel_port-246: 1.1.sta01060
|
||||
sel_port-247: 1.1.sta00560
|
||||
sel_port-248: 1.1.sta01560
|
||||
sel_port-249: 1.1.sta00061
|
||||
sel_port-250: 1.1.sta01061
|
||||
sel_port-251: 1.1.sta00561
|
||||
sel_port-252: 1.1.sta01561
|
||||
sel_port-253: 1.1.sta00062
|
||||
sel_port-254: 1.1.sta01062
|
||||
sel_port-255: 1.1.sta00562
|
||||
sel_port-256: 1.1.sta01562
|
||||
sel_port-257: 1.1.sta00063
|
||||
sel_port-258: 1.1.sta01063
|
||||
sel_port-259: 1.1.sta00563
|
||||
sel_port-260: 1.1.sta01563
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 2
|
||||
kpi_id: WiFi Capacity
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 1
|
||||
skip_2: 0
|
||||
skip_5: 0
|
||||
batch_size: 1,5,10,20,40,80
|
||||
loop_iter: 1
|
||||
duration: 30000
|
||||
test_groups: 0
|
||||
test_groups_subset: 0
|
||||
protocol: TCP-IPv4
|
||||
dl_rate_sel: Total Download Rate:
|
||||
dl_rate: 1000000000
|
||||
ul_rate_sel: Total Upload Rate:
|
||||
ul_rate: 1000000000
|
||||
prcnt_tcp: 100000
|
||||
l4_endp:
|
||||
pdu_sz: -1
|
||||
mss_sel: 1
|
||||
sock_buffer: 0
|
||||
ip_tos: 0
|
||||
multi_conn: -1
|
||||
min_speed: -1
|
||||
ps_interval: 60-second Running Average
|
||||
fairness: 0
|
||||
naptime: 0
|
||||
before_clear: 5000
|
||||
rpt_timer: 1000
|
||||
try_lower: 0
|
||||
rnd_rate: 1
|
||||
leave_ports_up: 0
|
||||
down_quiesce: 0
|
||||
udp_nat: 1
|
||||
record_other_ssids: 0
|
||||
clear_reset_counters: 0
|
||||
do_pf: 0
|
||||
pf_min_period_dl: 128000
|
||||
pf_min_period_ul: 0
|
||||
pf_max_reconnects: 0
|
||||
use_mix_pdu: 0
|
||||
pdu_prcnt_pps: 1
|
||||
pdu_prcnt_bps: 0
|
||||
pdu_mix_ln-0:
|
||||
show_scan: 1
|
||||
show_golden_3p: 0
|
||||
save_csv: 0
|
||||
show_realtime: 1
|
||||
show_pie: 1
|
||||
show_per_loop_totals: 1
|
||||
show_cx_time: 1
|
||||
show_dhcp: 1
|
||||
show_anqp: 1
|
||||
show_4way: 1
|
||||
show_latency: 1
|
||||
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
|
||||
DUT is an Edge-Core 5410, running TIP OpenWrt.
|
||||
@@ -1,32 +0,0 @@
|
||||
config wifi-device 'radio0'
|
||||
option type 'mac80211'
|
||||
option channel '36'
|
||||
option hwmode '11a'
|
||||
option path 'soc/1b700000.pci/pci0001:00/0001:00:00.0/0001:01:00.0'
|
||||
option htmode 'VHT80'
|
||||
option disabled '0'
|
||||
|
||||
config wifi-iface 'default_radio0'
|
||||
option device 'radio0'
|
||||
option network 'lan'
|
||||
option mode 'ap'
|
||||
option ssid 'Default-SSID-5gl'
|
||||
option encryption 'psk-mixed'
|
||||
option key '12345678'
|
||||
|
||||
config wifi-device 'radio1'
|
||||
option type 'mac80211'
|
||||
option channel '11'
|
||||
option hwmode '11g'
|
||||
option path 'soc/1b900000.pci/pci0002:00/0002:00:00.0/0002:01:00.0'
|
||||
option htmode 'HT20'
|
||||
option disabled '0'
|
||||
|
||||
config wifi-iface 'default_radio1'
|
||||
option device 'radio1'
|
||||
option network 'lan'
|
||||
option mode 'ap'
|
||||
option ssid 'Default-SSID-2g'
|
||||
option encryption 'psk-mixed'
|
||||
option key '12345678'
|
||||
|
||||
@@ -1,111 +0,0 @@
|
||||
[BLANK]
|
||||
sel_port-0: 1.1.sta00500
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 0
|
||||
kpi_id: AP Auto
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 1
|
||||
skip_2: 1
|
||||
skip_5: 1
|
||||
dut5b-0: NA
|
||||
dut5-0: ecw5410 Default-SSID-5gl
|
||||
dut2-0: ecw5410 Default-SSID-2g
|
||||
dut5b-1: NA
|
||||
dut5-1: NA
|
||||
dut2-1: NA
|
||||
dut5b-2: NA
|
||||
dut5-2: NA
|
||||
dut2-2: NA
|
||||
spatial_streams: AUTO
|
||||
bandw_options: AUTO
|
||||
modes: Auto
|
||||
upstream_port: 1.1.2 eth2
|
||||
operator:
|
||||
mconn: 1
|
||||
tos: 0
|
||||
vid_buf: 1000000
|
||||
vid_speed: 700000
|
||||
reset_stall_thresh_udp_dl: 9600
|
||||
reset_stall_thresh_udp_ul: 9600
|
||||
reset_stall_thresh_tcp_dl: 9600
|
||||
reset_stall_thresh_tcp_ul: 9600
|
||||
reset_stall_thresh_l4: 100000
|
||||
reset_stall_thresh_voip: 20000
|
||||
stab_udp_dl_min: 56000
|
||||
stab_udp_dl_max: 0
|
||||
stab_udp_ul_min: 56000
|
||||
stab_udp_ul_max: 0
|
||||
stab_tcp_dl_min: 500000
|
||||
stab_tcp_dl_max: 0
|
||||
stab_tcp_ul_min: 500000
|
||||
stab_tcp_ul_max: 0
|
||||
dl_speed: 85%
|
||||
ul_speed: 85%
|
||||
max_stations_2: 66
|
||||
max_stations_5: 66
|
||||
max_stations_dual: 132
|
||||
lt_sta: 2
|
||||
voip_calls: 0
|
||||
lt_dur: 3600
|
||||
reset_dur: 600
|
||||
lt_gi: 30
|
||||
dur20: 20
|
||||
hunt_retries: 1
|
||||
cap_dl: 1
|
||||
cap_ul: 0
|
||||
cap_use_pkt_sizes: 0
|
||||
stability_reset_radios: 0
|
||||
pkt_loss_thresh: 10000
|
||||
frame_sizes: 200, 512, 1024, MTU
|
||||
capacities: 1, 2, 5, 10, 20, 40, 64, 128, 256, 512, 1024, MAX
|
||||
radio2-0: 1.1.4 wiphy0
|
||||
radio2-1: 1.1.6 wiphy2
|
||||
radio2-2: 1.1.8 wiphy4
|
||||
radio5-0: 1.1.5 wiphy1
|
||||
radio5-1: 1.1.7 wiphy3
|
||||
radio5-2: 1.1.9 wiphy5
|
||||
radio5-3:
|
||||
radio5-4:
|
||||
radio5-5:
|
||||
basic_cx: 1
|
||||
tput: 0
|
||||
dual_band_tput: 0
|
||||
capacity: 0
|
||||
longterm: 0
|
||||
mix_stability: 0
|
||||
loop_iter: 1
|
||||
reset_batch_size: 1
|
||||
reset_duration_min: 10000
|
||||
reset_duration_max: 60000
|
||||
|
||||
# Configure pass/fail metrics for this testbed.
|
||||
pf_text0: 2.4 DL 200 70Mbps
|
||||
pf_text1: 2.4 DL 512 110Mbps
|
||||
pf_text2: 2.4 DL 1024 115Mbps
|
||||
pf_text3: 2.4 DL MTU 120Mbps
|
||||
pf_text4:
|
||||
pf_text5: 2.4 UL 200 88Mbps
|
||||
pf_text6: 2.4 UL 512 106Mbps
|
||||
pf_text7: 2.4 UL 1024 115Mbps
|
||||
pf_text8: 2.4 UL MTU 120Mbps
|
||||
pf_text9:
|
||||
pf_text10: 5 DL 200 72Mbps
|
||||
pf_text11: 5 DL 512 185Mbps
|
||||
pf_text12: 5 DL 1024 370Mbps
|
||||
pf_text13: 5 DL MTU 525Mbps
|
||||
pf_text14:
|
||||
pf_text15: 5 UL 200 90Mbps
|
||||
pf_text16: 5 UL 512 230Mbps
|
||||
pf_text17: 5 UL 1024 450Mbps
|
||||
pf_text18: 5 UL MTU 630Mbps
|
||||
|
||||
# Tune connect-time thresholds.
|
||||
cx_prcnt: 950000
|
||||
cx_open_thresh: 35
|
||||
cx_psk_thresh: 75
|
||||
cx_1x_thresh: 130
|
||||
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
[BLANK]
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 0
|
||||
kpi_id: Dataplane
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 0
|
||||
skip_2: 0
|
||||
skip_5: 0
|
||||
selected_dut: ea8300
|
||||
duration: 15000
|
||||
traffic_port: 1.1.136 sta00500
|
||||
upstream_port: 1.1.2 eth2
|
||||
path_loss: 10
|
||||
speed: 85%
|
||||
speed2: 0Kbps
|
||||
min_rssi_bound: -150
|
||||
max_rssi_bound: 0
|
||||
channels: AUTO
|
||||
modes: Auto
|
||||
pkts: 60;142;256;512;1024;MTU;4000
|
||||
spatial_streams: AUTO
|
||||
security_options: AUTO
|
||||
bandw_options: AUTO
|
||||
traffic_types: UDP
|
||||
directions: DUT Transmit;DUT Receive
|
||||
txo_preamble: OFDM
|
||||
txo_mcs: 0 CCK, OFDM, HT, VHT
|
||||
txo_retries: No Retry
|
||||
txo_sgi: OFF
|
||||
txo_txpower: 15
|
||||
attenuator: 0
|
||||
attenuator2: 0
|
||||
attenuator_mod: 255
|
||||
attenuator_mod2: 255
|
||||
attenuations: 0..+50..950
|
||||
attenuations2: 0..+50..950
|
||||
chamber: 0
|
||||
tt_deg: 0..+45..359
|
||||
cust_pkt_sz:
|
||||
show_3s: 0
|
||||
show_ll_graphs: 1
|
||||
show_gp_graphs: 1
|
||||
show_1m: 1
|
||||
pause_iter: 0
|
||||
show_realtime: 1
|
||||
operator:
|
||||
mconn: 1
|
||||
mpkt: 1000
|
||||
tos: 0
|
||||
loop_iterations: 1
|
||||
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Example usage of this script
|
||||
# DUT_SW_VER=my-build-id ./run_basic.bash
|
||||
#
|
||||
# Other DUT variables in test_bed_cfg.bash may also be over-ridden,
|
||||
# including those below. See LANforge 'add_dut' CLI command for
|
||||
# details on what these variables are for.
|
||||
|
||||
# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
|
||||
# Source config file
|
||||
. test_bed_cfg.bash
|
||||
|
||||
echo "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
|
||||
git log -n 8 --oneline >> ./tmp_gitlog.html
|
||||
echo "</pre>" >> ./tmp_gitlog.html
|
||||
|
||||
NOTES_HTML=`pwd`/testbed_notes.html
|
||||
GITLOG=`pwd`/tmp_gitlog.html
|
||||
|
||||
if [ -d "../../../wlan-ap" ]
|
||||
then
|
||||
DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html
|
||||
echo "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
|
||||
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
|
||||
echo "</pre>" >> $DUTGITLOG
|
||||
export DUTGITLOG
|
||||
fi
|
||||
export NOTES_HTML GITLOG
|
||||
|
||||
# TODO: Copy config file to cloud controller and restart it
|
||||
# and/or do other config to make it work.
|
||||
|
||||
# Change to scripts dir
|
||||
cd ../../lanforge/lanforge-scripts/gui
|
||||
|
||||
# Where to place results. basic_regression.bash will use this variable.
|
||||
RSLTS_DIR=/tmp/nola-02-basic-regression
|
||||
export RSLTS_DIR
|
||||
|
||||
# Clean any existing data from the results dir
|
||||
rm -fr $RSLTS_DIR
|
||||
|
||||
# Run one test
|
||||
# DEFAULT_ENABLE=0 DO_SHORT_AP_STABILITY_RESET=1 ./basic_regression.bash
|
||||
|
||||
# Clean up old DHCP leases
|
||||
../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases"
|
||||
|
||||
# Run all tests
|
||||
./basic_regression.bash
|
||||
|
||||
cd -
|
||||
|
||||
if [ ! -d $RSLTS_DIR ]
|
||||
then
|
||||
echo "Test did not run as expected, $RSLTS_DIR not found."
|
||||
mkdir -p $RSLTS_DIR
|
||||
fi
|
||||
|
||||
if [ -f ${MY_TMPDIR}/basic_regression_log.txt ]
|
||||
then
|
||||
echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR"
|
||||
mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/
|
||||
fi
|
||||
|
||||
echo "See results in $RSLTS_DIR"
|
||||
@@ -1,83 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Example usage of this script
|
||||
# DUT_SW_VER=my-build-id ./run_basic.bash
|
||||
#
|
||||
# Other DUT variables in test_bed_cfg.bash may also be over-ridden,
|
||||
# including those below. See LANforge 'add_dut' CLI command for
|
||||
# details on what these variables are for.
|
||||
|
||||
# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
|
||||
#set -x
|
||||
|
||||
DO_SHORT_AP_BASIC_CX=${DO_SHORT_AP_BASIC_CX:-1}
|
||||
DO_WCT_BI=${DO_WCT_BI:-1}
|
||||
|
||||
export DO_SHORT_AP_BASI_CX DO_WCT_BI
|
||||
|
||||
# Source config file
|
||||
. test_bed_cfg.bash
|
||||
|
||||
echo "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
|
||||
git log -n 8 --oneline >> ./tmp_gitlog.html
|
||||
echo "</pre>" >> ./tmp_gitlog.html
|
||||
|
||||
NOTES_HTML=`pwd`/testbed_notes.html
|
||||
GITLOG=`pwd`/tmp_gitlog.html
|
||||
|
||||
if [ -d "../../../wlan-ap" ]
|
||||
then
|
||||
DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html
|
||||
echo "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
|
||||
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
|
||||
echo "</pre>" >> $DUTGITLOG
|
||||
export DUTGITLOG
|
||||
fi
|
||||
export NOTES_HTML GITLOG
|
||||
|
||||
# TODO: Copy config file to cloud controller and restart it
|
||||
# and/or do other config to make it work.
|
||||
|
||||
# Change to scripts dir
|
||||
cd ../../lanforge/lanforge-scripts/gui
|
||||
|
||||
# Where to place results. basic_regression.bash will use this variable.
|
||||
RSLTS_DIR=/tmp/nola-02-basic-regression-fast
|
||||
export RSLTS_DIR
|
||||
|
||||
# Clean any existing data from the results dir
|
||||
rm -fr $RSLTS_DIR
|
||||
|
||||
# Clean up old DHCP leases
|
||||
../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases"
|
||||
|
||||
# Run a subset of available tests
|
||||
# See 'Tests to run' comment in basic_regression.bash for available options.
|
||||
|
||||
#DEFAULT_ENABLE=0 WCT_DURATION=20s DO_SHORT_AP_BASIC_CX=1 DO_WCT_BI=1 ./basic_regression.bash
|
||||
|
||||
DEFAULT_ENABLE=0 WCT_DURATION=20s ./basic_regression.bash
|
||||
|
||||
|
||||
# Run all tests
|
||||
#./basic_regression.bash
|
||||
|
||||
cd -
|
||||
|
||||
if [ ! -d $RSLTS_DIR ]
|
||||
then
|
||||
echo "Test did not run as expected, $RSLTS_DIR not found."
|
||||
mkdir -p $RSLTS_DIR
|
||||
fi
|
||||
|
||||
if [ -f ${MY_TMPDIR}/basic_regression_log.txt ]
|
||||
then
|
||||
echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR"
|
||||
mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/
|
||||
fi
|
||||
|
||||
echo "See results in $RSLTS_DIR"
|
||||
@@ -1,13 +0,0 @@
|
||||
profile_link 1.1 STA-AC 64 'DUT: ecw5410 Radio-1' NA wiphy4,AUTO -1
|
||||
profile_link 1.1 STA-AC 64 'DUT: ecw5410 Radio-2' NA wiphy5,AUTO -1
|
||||
profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1
|
||||
profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 100.97.39.129/25' NA eth3,eth2 -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy0,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy1,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy2,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy3,AUTO -1
|
||||
dut ecw5410 393 148
|
||||
dut upstream 306 62
|
||||
resource 1.1 132 218
|
||||
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
profile_link 1.1 STA-AC 24 'DUT: ecw5410 Radio-1' NA wiphy4,AUTO -1
|
||||
profile_link 1.1 STA-AC 24 'DUT: ecw5410 Radio-2' NA wiphy5,AUTO -1
|
||||
profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1
|
||||
profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 100.97.39.129/25' NA eth3,eth2 -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy0,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy1,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy2,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ecw5410 Radio-2' NA wiphy3,AUTO -1
|
||||
dut ecw5410 393 148
|
||||
dut upstream 306 62
|
||||
resource 1.1 132 218
|
||||
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
# Example test-bed configuration
|
||||
|
||||
# Scripts should source this file to set the default environment variables
|
||||
# and then override the variables specific to their test case (and it can be done
|
||||
# in opposite order for same results
|
||||
#
|
||||
# After the env variables are set,
|
||||
# call the 'lanforge/lanforge-scripts/gui/basic_regression.bash'
|
||||
# from the directory in which it resides.
|
||||
|
||||
PWD=`pwd`
|
||||
AP_SERIAL=${AP_SERIAL:-/dev/ttyAP2}
|
||||
LF_SERIAL=${LF_SERIAL:-/dev/ttyLF2}
|
||||
LFPASSWD=${LFPASSWD:-lanforge} # Root password on LANforge machine
|
||||
AP_AUTO_CFG_FILE=${AP_AUTO_CFG_FILE:-$PWD/ap-auto.txt}
|
||||
WCT_CFG_FILE=${WCT_CFG_FILE:-$PWD/wct.txt}
|
||||
DPT_CFG_FILE=${DPT_CFG_FILE:-$PWD/dpt-pkt-sz.txt}
|
||||
SCENARIO_CFG_FILE=${SCENARIO_CFG_FILE:-$PWD/scenario.txt}
|
||||
|
||||
# Default to enable cloud-sdk for this testbed, cloud-sdk is at IP addr below
|
||||
#USE_CLOUD_SDK=${USE_CLOUD_SDK:-192.168.100.164}
|
||||
|
||||
# LANforge target machine
|
||||
LFMANAGER=${LFMANAGER:-lf2}
|
||||
|
||||
# LANforge GUI machine (may often be same as target)
|
||||
GMANAGER=${GMANAGER:-lf2}
|
||||
GMPORT=${GMPORT:-3990}
|
||||
MY_TMPDIR=${MY_TMPDIR:-/tmp}
|
||||
|
||||
# Test configuration (10 minutes by default, in interest of time)
|
||||
STABILITY_DURATION=${STABILITY_DURATION:-600}
|
||||
TEST_RIG_ID=${TEST_RIG_ID:-NOLA-02-Basic}
|
||||
|
||||
# DUT configuration
|
||||
DUT_FLAGS=${DUT_FLAGS:-0x22} # AP, WPA-PSK
|
||||
#DUT_FLAGS=${DUT_FLAGS:-0x2} # AP, Open
|
||||
DUT_FLAGS_MASK=${DUT_FLAGS_MASK:-0xFFFF}
|
||||
DUT_SW_VER=${DUT_SW_VER:-OpenWrt-TIP}
|
||||
DUT_HW_VER=Edgecore-ECW5410
|
||||
DUT_MODEL=Edgecore-ECW5410
|
||||
DUT_SERIAL=${DUT_SERIAL:-NA}
|
||||
DUT_SSID1=${DUT_SSID1:-Default-SSID-2g}
|
||||
DUT_SSID2=${DUT_SSID2:-Default-SSID-5gl}
|
||||
DUT_PASSWD1=${DUT_PASSWD1:-12345678}
|
||||
DUT_PASSWD2=${DUT_PASSWD2:-12345678}
|
||||
# 2.4 radio
|
||||
DUT_BSSID1=68:21:5F:9D:0A:8B
|
||||
# 5Ghz radio
|
||||
DUT_BSSID2=68:21:5F:9D:0A:8C
|
||||
|
||||
export LF_SERIAL AP_SERIAL LFPASSWD
|
||||
export AP_AUTO_CFG_FILE WCT_CFG_FILE DPT_CFG_FILE SCENARIO_CFG_FILE
|
||||
export LFMANAGER GMANAGER GMPORT MY_TMPDIR
|
||||
export STABILITY_DURATION TEST_RIG_ID
|
||||
export DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
export DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
export DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
export DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
export USE_CLOUD_SDK
|
||||
@@ -1,323 +0,0 @@
|
||||
[BLANK]
|
||||
sel_port-0: 1.1.eth2
|
||||
sel_port-1: 1.1.sta00000
|
||||
sel_port-2: 1.1.sta01000
|
||||
sel_port-3: 1.1.sta00500
|
||||
sel_port-4: 1.1.sta01500
|
||||
sel_port-5: 1.1.sta03000
|
||||
sel_port-6: 1.1.sta03500
|
||||
sel_port-7: 1.1.sta04000
|
||||
sel_port-8: 1.1.sta04500
|
||||
sel_port-9: 1.1.sta00001
|
||||
sel_port-10: 1.1.sta01001
|
||||
sel_port-11: 1.1.sta00501
|
||||
sel_port-12: 1.1.sta01501
|
||||
sel_port-13: 1.1.sta00002
|
||||
sel_port-14: 1.1.sta01002
|
||||
sel_port-15: 1.1.sta00502
|
||||
sel_port-16: 1.1.sta01502
|
||||
sel_port-17: 1.1.sta00003
|
||||
sel_port-18: 1.1.sta01003
|
||||
sel_port-19: 1.1.sta00503
|
||||
sel_port-20: 1.1.sta01503
|
||||
sel_port-21: 1.1.sta00004
|
||||
sel_port-22: 1.1.sta01004
|
||||
sel_port-23: 1.1.sta00504
|
||||
sel_port-24: 1.1.sta01504
|
||||
sel_port-25: 1.1.sta00005
|
||||
sel_port-26: 1.1.sta01005
|
||||
sel_port-27: 1.1.sta00505
|
||||
sel_port-28: 1.1.sta01505
|
||||
sel_port-29: 1.1.sta00006
|
||||
sel_port-30: 1.1.sta01006
|
||||
sel_port-31: 1.1.sta00506
|
||||
sel_port-32: 1.1.sta01506
|
||||
sel_port-33: 1.1.sta00007
|
||||
sel_port-34: 1.1.sta01007
|
||||
sel_port-35: 1.1.sta00507
|
||||
sel_port-36: 1.1.sta01507
|
||||
sel_port-37: 1.1.sta00008
|
||||
sel_port-38: 1.1.sta01008
|
||||
sel_port-39: 1.1.sta00508
|
||||
sel_port-40: 1.1.sta01508
|
||||
sel_port-41: 1.1.sta00009
|
||||
sel_port-42: 1.1.sta01009
|
||||
sel_port-43: 1.1.sta00509
|
||||
sel_port-44: 1.1.sta01509
|
||||
sel_port-45: 1.1.sta00010
|
||||
sel_port-46: 1.1.sta01010
|
||||
sel_port-47: 1.1.sta00510
|
||||
sel_port-48: 1.1.sta01510
|
||||
sel_port-49: 1.1.sta00011
|
||||
sel_port-50: 1.1.sta01011
|
||||
sel_port-51: 1.1.sta00511
|
||||
sel_port-52: 1.1.sta01511
|
||||
sel_port-53: 1.1.sta00012
|
||||
sel_port-54: 1.1.sta01012
|
||||
sel_port-55: 1.1.sta00512
|
||||
sel_port-56: 1.1.sta01512
|
||||
sel_port-57: 1.1.sta00013
|
||||
sel_port-58: 1.1.sta01013
|
||||
sel_port-59: 1.1.sta00513
|
||||
sel_port-60: 1.1.sta01513
|
||||
sel_port-61: 1.1.sta00014
|
||||
sel_port-62: 1.1.sta01014
|
||||
sel_port-63: 1.1.sta00514
|
||||
sel_port-64: 1.1.sta01514
|
||||
sel_port-65: 1.1.sta00015
|
||||
sel_port-66: 1.1.sta01015
|
||||
sel_port-67: 1.1.sta00515
|
||||
sel_port-68: 1.1.sta01515
|
||||
sel_port-69: 1.1.sta00016
|
||||
sel_port-70: 1.1.sta01016
|
||||
sel_port-71: 1.1.sta00516
|
||||
sel_port-72: 1.1.sta01516
|
||||
sel_port-73: 1.1.sta00017
|
||||
sel_port-74: 1.1.sta01017
|
||||
sel_port-75: 1.1.sta00517
|
||||
sel_port-76: 1.1.sta01517
|
||||
sel_port-77: 1.1.sta00018
|
||||
sel_port-78: 1.1.sta01018
|
||||
sel_port-79: 1.1.sta00518
|
||||
sel_port-80: 1.1.sta01518
|
||||
sel_port-81: 1.1.sta00019
|
||||
sel_port-82: 1.1.sta01019
|
||||
sel_port-83: 1.1.sta00519
|
||||
sel_port-84: 1.1.sta01519
|
||||
sel_port-85: 1.1.sta00020
|
||||
sel_port-86: 1.1.sta01020
|
||||
sel_port-87: 1.1.sta00520
|
||||
sel_port-88: 1.1.sta01520
|
||||
sel_port-89: 1.1.sta00021
|
||||
sel_port-90: 1.1.sta01021
|
||||
sel_port-91: 1.1.sta00521
|
||||
sel_port-92: 1.1.sta01521
|
||||
sel_port-93: 1.1.sta00022
|
||||
sel_port-94: 1.1.sta01022
|
||||
sel_port-95: 1.1.sta00522
|
||||
sel_port-96: 1.1.sta01522
|
||||
sel_port-97: 1.1.sta00023
|
||||
sel_port-98: 1.1.sta01023
|
||||
sel_port-99: 1.1.sta00523
|
||||
sel_port-100: 1.1.sta01523
|
||||
sel_port-101: 1.1.sta00024
|
||||
sel_port-102: 1.1.sta01024
|
||||
sel_port-103: 1.1.sta00524
|
||||
sel_port-104: 1.1.sta01524
|
||||
sel_port-105: 1.1.sta00025
|
||||
sel_port-106: 1.1.sta01025
|
||||
sel_port-107: 1.1.sta00525
|
||||
sel_port-108: 1.1.sta01525
|
||||
sel_port-109: 1.1.sta00026
|
||||
sel_port-110: 1.1.sta01026
|
||||
sel_port-111: 1.1.sta00526
|
||||
sel_port-112: 1.1.sta01526
|
||||
sel_port-113: 1.1.sta00027
|
||||
sel_port-114: 1.1.sta01027
|
||||
sel_port-115: 1.1.sta00527
|
||||
sel_port-116: 1.1.sta01527
|
||||
sel_port-117: 1.1.sta00028
|
||||
sel_port-118: 1.1.sta01028
|
||||
sel_port-119: 1.1.sta00528
|
||||
sel_port-120: 1.1.sta01528
|
||||
sel_port-121: 1.1.sta00029
|
||||
sel_port-122: 1.1.sta01029
|
||||
sel_port-123: 1.1.sta00529
|
||||
sel_port-124: 1.1.sta01529
|
||||
sel_port-125: 1.1.sta00030
|
||||
sel_port-126: 1.1.sta01030
|
||||
sel_port-127: 1.1.sta00530
|
||||
sel_port-128: 1.1.sta01530
|
||||
sel_port-129: 1.1.sta00031
|
||||
sel_port-130: 1.1.sta01031
|
||||
sel_port-131: 1.1.sta00531
|
||||
sel_port-132: 1.1.sta01531
|
||||
sel_port-133: 1.1.sta00032
|
||||
sel_port-134: 1.1.sta01032
|
||||
sel_port-135: 1.1.sta00532
|
||||
sel_port-136: 1.1.sta01532
|
||||
sel_port-137: 1.1.sta00033
|
||||
sel_port-138: 1.1.sta01033
|
||||
sel_port-139: 1.1.sta00533
|
||||
sel_port-140: 1.1.sta01533
|
||||
sel_port-141: 1.1.sta00034
|
||||
sel_port-142: 1.1.sta01034
|
||||
sel_port-143: 1.1.sta00534
|
||||
sel_port-144: 1.1.sta01534
|
||||
sel_port-145: 1.1.sta00035
|
||||
sel_port-146: 1.1.sta01035
|
||||
sel_port-147: 1.1.sta00535
|
||||
sel_port-148: 1.1.sta01535
|
||||
sel_port-149: 1.1.sta00036
|
||||
sel_port-150: 1.1.sta01036
|
||||
sel_port-151: 1.1.sta00536
|
||||
sel_port-152: 1.1.sta01536
|
||||
sel_port-153: 1.1.sta00037
|
||||
sel_port-154: 1.1.sta01037
|
||||
sel_port-155: 1.1.sta00537
|
||||
sel_port-156: 1.1.sta01537
|
||||
sel_port-157: 1.1.sta00038
|
||||
sel_port-158: 1.1.sta01038
|
||||
sel_port-159: 1.1.sta00538
|
||||
sel_port-160: 1.1.sta01538
|
||||
sel_port-161: 1.1.sta00039
|
||||
sel_port-162: 1.1.sta01039
|
||||
sel_port-163: 1.1.sta00539
|
||||
sel_port-164: 1.1.sta01539
|
||||
sel_port-165: 1.1.sta00040
|
||||
sel_port-166: 1.1.sta01040
|
||||
sel_port-167: 1.1.sta00540
|
||||
sel_port-168: 1.1.sta01540
|
||||
sel_port-169: 1.1.sta00041
|
||||
sel_port-170: 1.1.sta01041
|
||||
sel_port-171: 1.1.sta00541
|
||||
sel_port-172: 1.1.sta01541
|
||||
sel_port-173: 1.1.sta00042
|
||||
sel_port-174: 1.1.sta01042
|
||||
sel_port-175: 1.1.sta00542
|
||||
sel_port-176: 1.1.sta01542
|
||||
sel_port-177: 1.1.sta00043
|
||||
sel_port-178: 1.1.sta01043
|
||||
sel_port-179: 1.1.sta00543
|
||||
sel_port-180: 1.1.sta01543
|
||||
sel_port-181: 1.1.sta00044
|
||||
sel_port-182: 1.1.sta01044
|
||||
sel_port-183: 1.1.sta00544
|
||||
sel_port-184: 1.1.sta01544
|
||||
sel_port-185: 1.1.sta00045
|
||||
sel_port-186: 1.1.sta01045
|
||||
sel_port-187: 1.1.sta00545
|
||||
sel_port-188: 1.1.sta01545
|
||||
sel_port-189: 1.1.sta00046
|
||||
sel_port-190: 1.1.sta01046
|
||||
sel_port-191: 1.1.sta00546
|
||||
sel_port-192: 1.1.sta01546
|
||||
sel_port-193: 1.1.sta00047
|
||||
sel_port-194: 1.1.sta01047
|
||||
sel_port-195: 1.1.sta00547
|
||||
sel_port-196: 1.1.sta01547
|
||||
sel_port-197: 1.1.sta00048
|
||||
sel_port-198: 1.1.sta01048
|
||||
sel_port-199: 1.1.sta00548
|
||||
sel_port-200: 1.1.sta01548
|
||||
sel_port-201: 1.1.sta00049
|
||||
sel_port-202: 1.1.sta01049
|
||||
sel_port-203: 1.1.sta00549
|
||||
sel_port-204: 1.1.sta01549
|
||||
sel_port-205: 1.1.sta00050
|
||||
sel_port-206: 1.1.sta01050
|
||||
sel_port-207: 1.1.sta00550
|
||||
sel_port-208: 1.1.sta01550
|
||||
sel_port-209: 1.1.sta00051
|
||||
sel_port-210: 1.1.sta01051
|
||||
sel_port-211: 1.1.sta00551
|
||||
sel_port-212: 1.1.sta01551
|
||||
sel_port-213: 1.1.sta00052
|
||||
sel_port-214: 1.1.sta01052
|
||||
sel_port-215: 1.1.sta00552
|
||||
sel_port-216: 1.1.sta01552
|
||||
sel_port-217: 1.1.sta00053
|
||||
sel_port-218: 1.1.sta01053
|
||||
sel_port-219: 1.1.sta00553
|
||||
sel_port-220: 1.1.sta01553
|
||||
sel_port-221: 1.1.sta00054
|
||||
sel_port-222: 1.1.sta01054
|
||||
sel_port-223: 1.1.sta00554
|
||||
sel_port-224: 1.1.sta01554
|
||||
sel_port-225: 1.1.sta00055
|
||||
sel_port-226: 1.1.sta01055
|
||||
sel_port-227: 1.1.sta00555
|
||||
sel_port-228: 1.1.sta01555
|
||||
sel_port-229: 1.1.sta00056
|
||||
sel_port-230: 1.1.sta01056
|
||||
sel_port-231: 1.1.sta00556
|
||||
sel_port-232: 1.1.sta01556
|
||||
sel_port-233: 1.1.sta00057
|
||||
sel_port-234: 1.1.sta01057
|
||||
sel_port-235: 1.1.sta00557
|
||||
sel_port-236: 1.1.sta01557
|
||||
sel_port-237: 1.1.sta00058
|
||||
sel_port-238: 1.1.sta01058
|
||||
sel_port-239: 1.1.sta00558
|
||||
sel_port-240: 1.1.sta01558
|
||||
sel_port-241: 1.1.sta00059
|
||||
sel_port-242: 1.1.sta01059
|
||||
sel_port-243: 1.1.sta00559
|
||||
sel_port-244: 1.1.sta01559
|
||||
sel_port-245: 1.1.sta00060
|
||||
sel_port-246: 1.1.sta01060
|
||||
sel_port-247: 1.1.sta00560
|
||||
sel_port-248: 1.1.sta01560
|
||||
sel_port-249: 1.1.sta00061
|
||||
sel_port-250: 1.1.sta01061
|
||||
sel_port-251: 1.1.sta00561
|
||||
sel_port-252: 1.1.sta01561
|
||||
sel_port-253: 1.1.sta00062
|
||||
sel_port-254: 1.1.sta01062
|
||||
sel_port-255: 1.1.sta00562
|
||||
sel_port-256: 1.1.sta01562
|
||||
sel_port-257: 1.1.sta00063
|
||||
sel_port-258: 1.1.sta01063
|
||||
sel_port-259: 1.1.sta00563
|
||||
sel_port-260: 1.1.sta01563
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 2
|
||||
kpi_id: WiFi Capacity
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 1
|
||||
skip_2: 0
|
||||
skip_5: 0
|
||||
batch_size: 1,5,10,20,40,80
|
||||
loop_iter: 1
|
||||
duration: 30000
|
||||
test_groups: 0
|
||||
test_groups_subset: 0
|
||||
protocol: TCP-IPv4
|
||||
dl_rate_sel: Total Download Rate:
|
||||
dl_rate: 1000000000
|
||||
ul_rate_sel: Total Upload Rate:
|
||||
ul_rate: 1000000000
|
||||
prcnt_tcp: 100000
|
||||
l4_endp:
|
||||
pdu_sz: -1
|
||||
mss_sel: 1
|
||||
sock_buffer: 0
|
||||
ip_tos: 0
|
||||
multi_conn: -1
|
||||
min_speed: -1
|
||||
ps_interval: 60-second Running Average
|
||||
fairness: 0
|
||||
naptime: 0
|
||||
before_clear: 5000
|
||||
rpt_timer: 1000
|
||||
try_lower: 0
|
||||
rnd_rate: 1
|
||||
leave_ports_up: 0
|
||||
down_quiesce: 0
|
||||
udp_nat: 1
|
||||
record_other_ssids: 0
|
||||
clear_reset_counters: 0
|
||||
do_pf: 0
|
||||
pf_min_period_dl: 128000
|
||||
pf_min_period_ul: 0
|
||||
pf_max_reconnects: 0
|
||||
use_mix_pdu: 0
|
||||
pdu_prcnt_pps: 1
|
||||
pdu_prcnt_bps: 0
|
||||
pdu_mix_ln-0:
|
||||
show_scan: 1
|
||||
show_golden_3p: 0
|
||||
save_csv: 0
|
||||
show_realtime: 1
|
||||
show_pie: 1
|
||||
show_per_loop_totals: 1
|
||||
show_cx_time: 1
|
||||
show_dhcp: 1
|
||||
show_anqp: 1
|
||||
show_4way: 1
|
||||
show_latency: 1
|
||||
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
|
||||
DUT is an TP-Link EC420, running TIP OpenWrt.
|
||||
@@ -1,34 +0,0 @@
|
||||
config wifi-device 'radio0'
|
||||
option type 'mac80211'
|
||||
option channel '36'
|
||||
option hwmode '11a'
|
||||
option path 'soc/40000000.pci/pci0000:00/0000:00:00.0/0000:01:00.0'
|
||||
option htmode 'VHT80'
|
||||
option disabled '0'
|
||||
|
||||
config wifi-iface 'default_radio0'
|
||||
option device 'radio0'
|
||||
option network 'lan'
|
||||
option mode 'ap'
|
||||
option ssid 'Default-SSID-5gl'
|
||||
option encryption 'psk-mixed'
|
||||
option key '12345678'
|
||||
option macaddr '00:00:ec:42:00:02'
|
||||
|
||||
config wifi-device 'radio1'
|
||||
option type 'mac80211'
|
||||
option hwmode '11g'
|
||||
option path 'platform/soc/a000000.wifi'
|
||||
option htmode 'HT40'
|
||||
option channel 'auto'
|
||||
option disabled '0'
|
||||
|
||||
config wifi-iface 'default_radio1'
|
||||
option device 'radio1'
|
||||
option network 'lan'
|
||||
option mode 'ap'
|
||||
option ssid 'Default-SSID-2g'
|
||||
option encryption 'psk-mixed'
|
||||
option key '12345678'
|
||||
option macaddr '00:00:ec:42:00:01'
|
||||
|
||||
@@ -1,111 +0,0 @@
|
||||
[BLANK]
|
||||
sel_port-0: 1.1.sta00500
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 0
|
||||
kpi_id: AP Auto
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 1
|
||||
skip_2: 1
|
||||
skip_5: 1
|
||||
dut5b-0: NA
|
||||
dut5-0: ec420 Default-SSID-5gl
|
||||
dut2-0: ec420 Default-SSID-2g
|
||||
dut5b-1: NA
|
||||
dut5-1: NA
|
||||
dut2-1: NA
|
||||
dut5b-2: NA
|
||||
dut5-2: NA
|
||||
dut2-2: NA
|
||||
spatial_streams: AUTO
|
||||
bandw_options: AUTO
|
||||
modes: Auto
|
||||
upstream_port: 1.1.2 eth2
|
||||
operator:
|
||||
mconn: 1
|
||||
tos: 0
|
||||
vid_buf: 1000000
|
||||
vid_speed: 700000
|
||||
reset_stall_thresh_udp_dl: 9600
|
||||
reset_stall_thresh_udp_ul: 9600
|
||||
reset_stall_thresh_tcp_dl: 9600
|
||||
reset_stall_thresh_tcp_ul: 9600
|
||||
reset_stall_thresh_l4: 100000
|
||||
reset_stall_thresh_voip: 20000
|
||||
stab_udp_dl_min: 56000
|
||||
stab_udp_dl_max: 0
|
||||
stab_udp_ul_min: 56000
|
||||
stab_udp_ul_max: 0
|
||||
stab_tcp_dl_min: 500000
|
||||
stab_tcp_dl_max: 0
|
||||
stab_tcp_ul_min: 500000
|
||||
stab_tcp_ul_max: 0
|
||||
dl_speed: 85%
|
||||
ul_speed: 85%
|
||||
max_stations_2: 66
|
||||
max_stations_5: 66
|
||||
max_stations_dual: 132
|
||||
lt_sta: 2
|
||||
voip_calls: 0
|
||||
lt_dur: 3600
|
||||
reset_dur: 600
|
||||
lt_gi: 30
|
||||
dur20: 20
|
||||
hunt_retries: 1
|
||||
cap_dl: 1
|
||||
cap_ul: 0
|
||||
cap_use_pkt_sizes: 0
|
||||
stability_reset_radios: 0
|
||||
pkt_loss_thresh: 10000
|
||||
frame_sizes: 200, 512, 1024, MTU
|
||||
capacities: 1, 2, 5, 10, 20, 40, 64, 128, 256, 512, 1024, MAX
|
||||
radio2-0: 1.1.4 wiphy0
|
||||
radio2-1: 1.1.6 wiphy2
|
||||
radio2-2: 1.1.8 wiphy4
|
||||
radio5-0: 1.1.5 wiphy1
|
||||
radio5-1: 1.1.7 wiphy3
|
||||
radio5-2: 1.1.9 wiphy5
|
||||
radio5-3:
|
||||
radio5-4:
|
||||
radio5-5:
|
||||
basic_cx: 1
|
||||
tput: 0
|
||||
dual_band_tput: 0
|
||||
capacity: 0
|
||||
longterm: 0
|
||||
mix_stability: 0
|
||||
loop_iter: 1
|
||||
reset_batch_size: 1
|
||||
reset_duration_min: 10000
|
||||
reset_duration_max: 60000
|
||||
|
||||
# Configure pass/fail metrics for this testbed.
|
||||
pf_text0: 2.4 DL 200 70Mbps
|
||||
pf_text1: 2.4 DL 512 110Mbps
|
||||
pf_text2: 2.4 DL 1024 115Mbps
|
||||
pf_text3: 2.4 DL MTU 120Mbps
|
||||
pf_text4:
|
||||
pf_text5: 2.4 UL 200 88Mbps
|
||||
pf_text6: 2.4 UL 512 106Mbps
|
||||
pf_text7: 2.4 UL 1024 115Mbps
|
||||
pf_text8: 2.4 UL MTU 120Mbps
|
||||
pf_text9:
|
||||
pf_text10: 5 DL 200 72Mbps
|
||||
pf_text11: 5 DL 512 185Mbps
|
||||
pf_text12: 5 DL 1024 370Mbps
|
||||
pf_text13: 5 DL MTU 525Mbps
|
||||
pf_text14:
|
||||
pf_text15: 5 UL 200 90Mbps
|
||||
pf_text16: 5 UL 512 230Mbps
|
||||
pf_text17: 5 UL 1024 450Mbps
|
||||
pf_text18: 5 UL MTU 630Mbps
|
||||
|
||||
# Tune connect-time thresholds.
|
||||
cx_prcnt: 950000
|
||||
cx_open_thresh: 35
|
||||
cx_psk_thresh: 75
|
||||
cx_1x_thresh: 130
|
||||
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
[BLANK]
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 0
|
||||
kpi_id: Dataplane
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 0
|
||||
skip_2: 0
|
||||
skip_5: 0
|
||||
selected_dut: ec420
|
||||
duration: 15000
|
||||
traffic_port: 1.1.136 sta00500
|
||||
upstream_port: 1.1.2 eth2
|
||||
path_loss: 10
|
||||
speed: 85%
|
||||
speed2: 0Kbps
|
||||
min_rssi_bound: -150
|
||||
max_rssi_bound: 0
|
||||
channels: AUTO
|
||||
modes: Auto
|
||||
pkts: 60;142;256;512;1024;MTU;4000
|
||||
spatial_streams: AUTO
|
||||
security_options: AUTO
|
||||
bandw_options: AUTO
|
||||
traffic_types: UDP
|
||||
directions: DUT Transmit;DUT Receive
|
||||
txo_preamble: OFDM
|
||||
txo_mcs: 0 CCK, OFDM, HT, VHT
|
||||
txo_retries: No Retry
|
||||
txo_sgi: OFF
|
||||
txo_txpower: 15
|
||||
attenuator: 0
|
||||
attenuator2: 0
|
||||
attenuator_mod: 255
|
||||
attenuator_mod2: 255
|
||||
attenuations: 0..+50..950
|
||||
attenuations2: 0..+50..950
|
||||
chamber: 0
|
||||
tt_deg: 0..+45..359
|
||||
cust_pkt_sz:
|
||||
show_3s: 0
|
||||
show_ll_graphs: 1
|
||||
show_gp_graphs: 1
|
||||
show_1m: 1
|
||||
pause_iter: 0
|
||||
show_realtime: 1
|
||||
operator:
|
||||
mconn: 1
|
||||
mpkt: 1000
|
||||
tos: 0
|
||||
loop_iterations: 1
|
||||
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Example usage of this script
|
||||
# DUT_SW_VER=my-build-id ./run_basic.bash
|
||||
#
|
||||
# Other DUT variables in test_bed_cfg.bash may also be over-ridden,
|
||||
# including those below. See LANforge 'add_dut' CLI command for
|
||||
# details on what these variables are for.
|
||||
|
||||
# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
|
||||
# Source config file
|
||||
. test_bed_cfg.bash
|
||||
|
||||
echo "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
|
||||
git log -n 8 --oneline >> ./tmp_gitlog.html
|
||||
echo "</pre>" >> ./tmp_gitlog.html
|
||||
|
||||
NOTES_HTML=`pwd`/testbed_notes.html
|
||||
GITLOG=`pwd`/tmp_gitlog.html
|
||||
|
||||
if [ -d "../../../wlan-ap" ]
|
||||
then
|
||||
DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html
|
||||
echo "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
|
||||
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
|
||||
echo "</pre>" >> $DUTGITLOG
|
||||
export DUTGITLOG
|
||||
fi
|
||||
export NOTES_HTML GITLOG
|
||||
|
||||
# TODO: Copy config file to cloud controller and restart it
|
||||
# and/or do other config to make it work.
|
||||
|
||||
# Change to scripts dir
|
||||
cd ../../lanforge/lanforge-scripts/gui
|
||||
|
||||
# Where to place results. basic_regression.bash will use this variable.
|
||||
RSLTS_DIR=/tmp/nola-03-basic-regression
|
||||
export RSLTS_DIR
|
||||
|
||||
# Clean any existing data from the results dir
|
||||
rm -fr $RSLTS_DIR
|
||||
|
||||
# Run one test
|
||||
# DEFAULT_ENABLE=0 DO_SHORT_AP_STABILITY_RESET=1 ./basic_regression.bash
|
||||
|
||||
# Clean up old DHCP leases
|
||||
../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases"
|
||||
|
||||
# Run all tests
|
||||
./basic_regression.bash
|
||||
|
||||
cd -
|
||||
|
||||
if [ ! -d $RSLTS_DIR ]
|
||||
then
|
||||
echo "Test did not run as expected, $RSLTS_DIR not found."
|
||||
mkdir -p $RSLTS_DIR
|
||||
fi
|
||||
|
||||
if [ -f ${MY_TMPDIR}/basic_regression_log.txt ]
|
||||
then
|
||||
echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR"
|
||||
mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/
|
||||
fi
|
||||
|
||||
echo "See results in $RSLTS_DIR"
|
||||
@@ -1,83 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Example usage of this script
|
||||
# DUT_SW_VER=my-build-id ./run_basic.bash
|
||||
#
|
||||
# Other DUT variables in test_bed_cfg.bash may also be over-ridden,
|
||||
# including those below. See LANforge 'add_dut' CLI command for
|
||||
# details on what these variables are for.
|
||||
|
||||
# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
|
||||
#set -x
|
||||
|
||||
DO_SHORT_AP_BASIC_CX=${DO_SHORT_AP_BASIC_CX:-1}
|
||||
DO_WCT_BI=${DO_WCT_BI:-1}
|
||||
|
||||
export DO_SHORT_AP_BASI_CX DO_WCT_BI
|
||||
|
||||
# Source config file
|
||||
. test_bed_cfg.bash
|
||||
|
||||
echo "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
|
||||
git log -n 8 --oneline >> ./tmp_gitlog.html
|
||||
echo "</pre>" >> ./tmp_gitlog.html
|
||||
|
||||
NOTES_HTML=`pwd`/testbed_notes.html
|
||||
GITLOG=`pwd`/tmp_gitlog.html
|
||||
|
||||
if [ -d "../../../wlan-ap" ]
|
||||
then
|
||||
DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html
|
||||
echo "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
|
||||
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
|
||||
echo "</pre>" >> $DUTGITLOG
|
||||
export DUTGITLOG
|
||||
fi
|
||||
export NOTES_HTML GITLOG
|
||||
|
||||
# TODO: Copy config file to cloud controller and restart it
|
||||
# and/or do other config to make it work.
|
||||
|
||||
# Change to scripts dir
|
||||
cd ../../lanforge/lanforge-scripts/gui
|
||||
|
||||
# Where to place results. basic_regression.bash will use this variable.
|
||||
RSLTS_DIR=/tmp/nola-03-basic-regression-fast
|
||||
export RSLTS_DIR
|
||||
|
||||
# Clean any existing data from the results dir
|
||||
rm -fr $RSLTS_DIR
|
||||
|
||||
# Clean up old DHCP leases
|
||||
../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases"
|
||||
|
||||
# Run a subset of available tests
|
||||
# See 'Tests to run' comment in basic_regression.bash for available options.
|
||||
|
||||
#DEFAULT_ENABLE=0 WCT_DURATION=20s DO_SHORT_AP_BASIC_CX=1 DO_WCT_BI=1 ./basic_regression.bash
|
||||
|
||||
DEFAULT_ENABLE=0 WCT_DURATION=20s ./basic_regression.bash
|
||||
|
||||
|
||||
# Run all tests
|
||||
#./basic_regression.bash
|
||||
|
||||
cd -
|
||||
|
||||
if [ ! -d $RSLTS_DIR ]
|
||||
then
|
||||
echo "Test did not run as expected, $RSLTS_DIR not found."
|
||||
mkdir -p $RSLTS_DIR
|
||||
fi
|
||||
|
||||
if [ -f ${MY_TMPDIR}/basic_regression_log.txt ]
|
||||
then
|
||||
echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR"
|
||||
mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/
|
||||
fi
|
||||
|
||||
echo "See results in $RSLTS_DIR"
|
||||
@@ -1,13 +0,0 @@
|
||||
profile_link 1.1 STA-AC 64 'DUT: ec420 Radio-1' NA wiphy4,AUTO -1
|
||||
profile_link 1.1 STA-AC 64 'DUT: ec420 Radio-2' NA wiphy5,AUTO -1
|
||||
profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1
|
||||
profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 100.97.39.129/25' NA eth3,eth2 -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ec420 Radio-2' NA wiphy0,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ec420 Radio-2' NA wiphy1,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ec420 Radio-2' NA wiphy2,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ec420 Radio-2' NA wiphy3,AUTO -1
|
||||
dut ec420 393 148
|
||||
dut upstream 306 62
|
||||
resource 1.1 132 218
|
||||
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
profile_link 1.1 STA-AC 24 'DUT: ec420 Radio-1' NA wiphy4,AUTO -1
|
||||
profile_link 1.1 STA-AC 24 'DUT: ec420 Radio-2' NA wiphy5,AUTO -1
|
||||
profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1
|
||||
profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 100.97.39.129/25' NA eth3,eth2 -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ec420 Radio-2' NA wiphy0,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ec420 Radio-2' NA wiphy1,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ec420 Radio-2' NA wiphy2,AUTO -1
|
||||
profile_link 1.1 STA-AC 1 'DUT: ec420 Radio-2' NA wiphy3,AUTO -1
|
||||
dut ec420 393 148
|
||||
dut upstream 306 62
|
||||
resource 1.1 132 218
|
||||
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
# Example test-bed configuration
|
||||
|
||||
# Scripts should source this file to set the default environment variables
|
||||
# and then override the variables specific to their test case (and it can be done
|
||||
# in opposite order for same results
|
||||
#
|
||||
# After the env variables are set,
|
||||
# call the 'lanforge/lanforge-scripts/gui/basic_regression.bash'
|
||||
# from the directory in which it resides.
|
||||
|
||||
PWD=`pwd`
|
||||
AP_SERIAL=${AP_SERIAL:-/dev/ttyAP3}
|
||||
LF_SERIAL=${LF_SERIAL:-/dev/ttyLF3}
|
||||
LFPASSWD=${LFPASSWD:-lanforge} # Root password on LANforge machine
|
||||
AP_AUTO_CFG_FILE=${AP_AUTO_CFG_FILE:-$PWD/ap-auto.txt}
|
||||
WCT_CFG_FILE=${WCT_CFG_FILE:-$PWD/wct.txt}
|
||||
DPT_CFG_FILE=${DPT_CFG_FILE:-$PWD/dpt-pkt-sz.txt}
|
||||
SCENARIO_CFG_FILE=${SCENARIO_CFG_FILE:-$PWD/scenario.txt}
|
||||
|
||||
# Default to enable cloud-sdk for this testbed, cloud-sdk is at IP addr below
|
||||
#USE_CLOUD_SDK=${USE_CLOUD_SDK:-192.168.100.164}
|
||||
|
||||
# LANforge target machine
|
||||
LFMANAGER=${LFMANAGER:-lf3}
|
||||
|
||||
# LANforge GUI machine (may often be same as target)
|
||||
GMANAGER=${GMANAGER:-lf3}
|
||||
GMPORT=${GMPORT:-3990}
|
||||
MY_TMPDIR=${MY_TMPDIR:-/tmp}
|
||||
|
||||
# Test configuration (10 minutes by default, in interest of time)
|
||||
STABILITY_DURATION=${STABILITY_DURATION:-600}
|
||||
TEST_RIG_ID=${TEST_RIG_ID:-NOLA-03-Basic}
|
||||
|
||||
# DUT configuration
|
||||
DUT_FLAGS=${DUT_FLAGS:-0x22} # AP, WPA-PSK
|
||||
#DUT_FLAGS=${DUT_FLAGS:-0x2} # AP, Open
|
||||
DUT_FLAGS_MASK=${DUT_FLAGS_MASK:-0xFFFF}
|
||||
DUT_SW_VER=${DUT_SW_VER:-OpenWrt-TIP}
|
||||
DUT_HW_VER="TP-Link EC420"
|
||||
DUT_MODEL="TP-Link EC420"
|
||||
DUT_SERIAL=${DUT_SERIAL:-NA}
|
||||
DUT_SSID1=${DUT_SSID1:-Default-SSID-2g}
|
||||
DUT_SSID2=${DUT_SSID2:-Default-SSID-5gl}
|
||||
DUT_PASSWD1=${DUT_PASSWD1:-12345678}
|
||||
DUT_PASSWD2=${DUT_PASSWD2:-12345678}
|
||||
# 2.4 radio
|
||||
DUT_BSSID1=00:00:ec:42:00:01
|
||||
# 5Ghz radio
|
||||
DUT_BSSID2=00:00:ec:42:00:02
|
||||
|
||||
export LF_SERIAL AP_SERIAL LFPASSWD
|
||||
export AP_AUTO_CFG_FILE WCT_CFG_FILE DPT_CFG_FILE SCENARIO_CFG_FILE
|
||||
export LFMANAGER GMANAGER GMPORT MY_TMPDIR
|
||||
export STABILITY_DURATION TEST_RIG_ID
|
||||
export DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL
|
||||
export DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3
|
||||
export DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3
|
||||
export DUT_BSSID1 DUT_BSSID2 DUT_BSSID3
|
||||
export USE_CLOUD_SDK
|
||||
@@ -1,323 +0,0 @@
|
||||
[BLANK]
|
||||
sel_port-0: 1.1.eth2
|
||||
sel_port-1: 1.1.sta00000
|
||||
sel_port-2: 1.1.sta01000
|
||||
sel_port-3: 1.1.sta00500
|
||||
sel_port-4: 1.1.sta01500
|
||||
sel_port-5: 1.1.sta03000
|
||||
sel_port-6: 1.1.sta03500
|
||||
sel_port-7: 1.1.sta04000
|
||||
sel_port-8: 1.1.sta04500
|
||||
sel_port-9: 1.1.sta00001
|
||||
sel_port-10: 1.1.sta01001
|
||||
sel_port-11: 1.1.sta00501
|
||||
sel_port-12: 1.1.sta01501
|
||||
sel_port-13: 1.1.sta00002
|
||||
sel_port-14: 1.1.sta01002
|
||||
sel_port-15: 1.1.sta00502
|
||||
sel_port-16: 1.1.sta01502
|
||||
sel_port-17: 1.1.sta00003
|
||||
sel_port-18: 1.1.sta01003
|
||||
sel_port-19: 1.1.sta00503
|
||||
sel_port-20: 1.1.sta01503
|
||||
sel_port-21: 1.1.sta00004
|
||||
sel_port-22: 1.1.sta01004
|
||||
sel_port-23: 1.1.sta00504
|
||||
sel_port-24: 1.1.sta01504
|
||||
sel_port-25: 1.1.sta00005
|
||||
sel_port-26: 1.1.sta01005
|
||||
sel_port-27: 1.1.sta00505
|
||||
sel_port-28: 1.1.sta01505
|
||||
sel_port-29: 1.1.sta00006
|
||||
sel_port-30: 1.1.sta01006
|
||||
sel_port-31: 1.1.sta00506
|
||||
sel_port-32: 1.1.sta01506
|
||||
sel_port-33: 1.1.sta00007
|
||||
sel_port-34: 1.1.sta01007
|
||||
sel_port-35: 1.1.sta00507
|
||||
sel_port-36: 1.1.sta01507
|
||||
sel_port-37: 1.1.sta00008
|
||||
sel_port-38: 1.1.sta01008
|
||||
sel_port-39: 1.1.sta00508
|
||||
sel_port-40: 1.1.sta01508
|
||||
sel_port-41: 1.1.sta00009
|
||||
sel_port-42: 1.1.sta01009
|
||||
sel_port-43: 1.1.sta00509
|
||||
sel_port-44: 1.1.sta01509
|
||||
sel_port-45: 1.1.sta00010
|
||||
sel_port-46: 1.1.sta01010
|
||||
sel_port-47: 1.1.sta00510
|
||||
sel_port-48: 1.1.sta01510
|
||||
sel_port-49: 1.1.sta00011
|
||||
sel_port-50: 1.1.sta01011
|
||||
sel_port-51: 1.1.sta00511
|
||||
sel_port-52: 1.1.sta01511
|
||||
sel_port-53: 1.1.sta00012
|
||||
sel_port-54: 1.1.sta01012
|
||||
sel_port-55: 1.1.sta00512
|
||||
sel_port-56: 1.1.sta01512
|
||||
sel_port-57: 1.1.sta00013
|
||||
sel_port-58: 1.1.sta01013
|
||||
sel_port-59: 1.1.sta00513
|
||||
sel_port-60: 1.1.sta01513
|
||||
sel_port-61: 1.1.sta00014
|
||||
sel_port-62: 1.1.sta01014
|
||||
sel_port-63: 1.1.sta00514
|
||||
sel_port-64: 1.1.sta01514
|
||||
sel_port-65: 1.1.sta00015
|
||||
sel_port-66: 1.1.sta01015
|
||||
sel_port-67: 1.1.sta00515
|
||||
sel_port-68: 1.1.sta01515
|
||||
sel_port-69: 1.1.sta00016
|
||||
sel_port-70: 1.1.sta01016
|
||||
sel_port-71: 1.1.sta00516
|
||||
sel_port-72: 1.1.sta01516
|
||||
sel_port-73: 1.1.sta00017
|
||||
sel_port-74: 1.1.sta01017
|
||||
sel_port-75: 1.1.sta00517
|
||||
sel_port-76: 1.1.sta01517
|
||||
sel_port-77: 1.1.sta00018
|
||||
sel_port-78: 1.1.sta01018
|
||||
sel_port-79: 1.1.sta00518
|
||||
sel_port-80: 1.1.sta01518
|
||||
sel_port-81: 1.1.sta00019
|
||||
sel_port-82: 1.1.sta01019
|
||||
sel_port-83: 1.1.sta00519
|
||||
sel_port-84: 1.1.sta01519
|
||||
sel_port-85: 1.1.sta00020
|
||||
sel_port-86: 1.1.sta01020
|
||||
sel_port-87: 1.1.sta00520
|
||||
sel_port-88: 1.1.sta01520
|
||||
sel_port-89: 1.1.sta00021
|
||||
sel_port-90: 1.1.sta01021
|
||||
sel_port-91: 1.1.sta00521
|
||||
sel_port-92: 1.1.sta01521
|
||||
sel_port-93: 1.1.sta00022
|
||||
sel_port-94: 1.1.sta01022
|
||||
sel_port-95: 1.1.sta00522
|
||||
sel_port-96: 1.1.sta01522
|
||||
sel_port-97: 1.1.sta00023
|
||||
sel_port-98: 1.1.sta01023
|
||||
sel_port-99: 1.1.sta00523
|
||||
sel_port-100: 1.1.sta01523
|
||||
sel_port-101: 1.1.sta00024
|
||||
sel_port-102: 1.1.sta01024
|
||||
sel_port-103: 1.1.sta00524
|
||||
sel_port-104: 1.1.sta01524
|
||||
sel_port-105: 1.1.sta00025
|
||||
sel_port-106: 1.1.sta01025
|
||||
sel_port-107: 1.1.sta00525
|
||||
sel_port-108: 1.1.sta01525
|
||||
sel_port-109: 1.1.sta00026
|
||||
sel_port-110: 1.1.sta01026
|
||||
sel_port-111: 1.1.sta00526
|
||||
sel_port-112: 1.1.sta01526
|
||||
sel_port-113: 1.1.sta00027
|
||||
sel_port-114: 1.1.sta01027
|
||||
sel_port-115: 1.1.sta00527
|
||||
sel_port-116: 1.1.sta01527
|
||||
sel_port-117: 1.1.sta00028
|
||||
sel_port-118: 1.1.sta01028
|
||||
sel_port-119: 1.1.sta00528
|
||||
sel_port-120: 1.1.sta01528
|
||||
sel_port-121: 1.1.sta00029
|
||||
sel_port-122: 1.1.sta01029
|
||||
sel_port-123: 1.1.sta00529
|
||||
sel_port-124: 1.1.sta01529
|
||||
sel_port-125: 1.1.sta00030
|
||||
sel_port-126: 1.1.sta01030
|
||||
sel_port-127: 1.1.sta00530
|
||||
sel_port-128: 1.1.sta01530
|
||||
sel_port-129: 1.1.sta00031
|
||||
sel_port-130: 1.1.sta01031
|
||||
sel_port-131: 1.1.sta00531
|
||||
sel_port-132: 1.1.sta01531
|
||||
sel_port-133: 1.1.sta00032
|
||||
sel_port-134: 1.1.sta01032
|
||||
sel_port-135: 1.1.sta00532
|
||||
sel_port-136: 1.1.sta01532
|
||||
sel_port-137: 1.1.sta00033
|
||||
sel_port-138: 1.1.sta01033
|
||||
sel_port-139: 1.1.sta00533
|
||||
sel_port-140: 1.1.sta01533
|
||||
sel_port-141: 1.1.sta00034
|
||||
sel_port-142: 1.1.sta01034
|
||||
sel_port-143: 1.1.sta00534
|
||||
sel_port-144: 1.1.sta01534
|
||||
sel_port-145: 1.1.sta00035
|
||||
sel_port-146: 1.1.sta01035
|
||||
sel_port-147: 1.1.sta00535
|
||||
sel_port-148: 1.1.sta01535
|
||||
sel_port-149: 1.1.sta00036
|
||||
sel_port-150: 1.1.sta01036
|
||||
sel_port-151: 1.1.sta00536
|
||||
sel_port-152: 1.1.sta01536
|
||||
sel_port-153: 1.1.sta00037
|
||||
sel_port-154: 1.1.sta01037
|
||||
sel_port-155: 1.1.sta00537
|
||||
sel_port-156: 1.1.sta01537
|
||||
sel_port-157: 1.1.sta00038
|
||||
sel_port-158: 1.1.sta01038
|
||||
sel_port-159: 1.1.sta00538
|
||||
sel_port-160: 1.1.sta01538
|
||||
sel_port-161: 1.1.sta00039
|
||||
sel_port-162: 1.1.sta01039
|
||||
sel_port-163: 1.1.sta00539
|
||||
sel_port-164: 1.1.sta01539
|
||||
sel_port-165: 1.1.sta00040
|
||||
sel_port-166: 1.1.sta01040
|
||||
sel_port-167: 1.1.sta00540
|
||||
sel_port-168: 1.1.sta01540
|
||||
sel_port-169: 1.1.sta00041
|
||||
sel_port-170: 1.1.sta01041
|
||||
sel_port-171: 1.1.sta00541
|
||||
sel_port-172: 1.1.sta01541
|
||||
sel_port-173: 1.1.sta00042
|
||||
sel_port-174: 1.1.sta01042
|
||||
sel_port-175: 1.1.sta00542
|
||||
sel_port-176: 1.1.sta01542
|
||||
sel_port-177: 1.1.sta00043
|
||||
sel_port-178: 1.1.sta01043
|
||||
sel_port-179: 1.1.sta00543
|
||||
sel_port-180: 1.1.sta01543
|
||||
sel_port-181: 1.1.sta00044
|
||||
sel_port-182: 1.1.sta01044
|
||||
sel_port-183: 1.1.sta00544
|
||||
sel_port-184: 1.1.sta01544
|
||||
sel_port-185: 1.1.sta00045
|
||||
sel_port-186: 1.1.sta01045
|
||||
sel_port-187: 1.1.sta00545
|
||||
sel_port-188: 1.1.sta01545
|
||||
sel_port-189: 1.1.sta00046
|
||||
sel_port-190: 1.1.sta01046
|
||||
sel_port-191: 1.1.sta00546
|
||||
sel_port-192: 1.1.sta01546
|
||||
sel_port-193: 1.1.sta00047
|
||||
sel_port-194: 1.1.sta01047
|
||||
sel_port-195: 1.1.sta00547
|
||||
sel_port-196: 1.1.sta01547
|
||||
sel_port-197: 1.1.sta00048
|
||||
sel_port-198: 1.1.sta01048
|
||||
sel_port-199: 1.1.sta00548
|
||||
sel_port-200: 1.1.sta01548
|
||||
sel_port-201: 1.1.sta00049
|
||||
sel_port-202: 1.1.sta01049
|
||||
sel_port-203: 1.1.sta00549
|
||||
sel_port-204: 1.1.sta01549
|
||||
sel_port-205: 1.1.sta00050
|
||||
sel_port-206: 1.1.sta01050
|
||||
sel_port-207: 1.1.sta00550
|
||||
sel_port-208: 1.1.sta01550
|
||||
sel_port-209: 1.1.sta00051
|
||||
sel_port-210: 1.1.sta01051
|
||||
sel_port-211: 1.1.sta00551
|
||||
sel_port-212: 1.1.sta01551
|
||||
sel_port-213: 1.1.sta00052
|
||||
sel_port-214: 1.1.sta01052
|
||||
sel_port-215: 1.1.sta00552
|
||||
sel_port-216: 1.1.sta01552
|
||||
sel_port-217: 1.1.sta00053
|
||||
sel_port-218: 1.1.sta01053
|
||||
sel_port-219: 1.1.sta00553
|
||||
sel_port-220: 1.1.sta01553
|
||||
sel_port-221: 1.1.sta00054
|
||||
sel_port-222: 1.1.sta01054
|
||||
sel_port-223: 1.1.sta00554
|
||||
sel_port-224: 1.1.sta01554
|
||||
sel_port-225: 1.1.sta00055
|
||||
sel_port-226: 1.1.sta01055
|
||||
sel_port-227: 1.1.sta00555
|
||||
sel_port-228: 1.1.sta01555
|
||||
sel_port-229: 1.1.sta00056
|
||||
sel_port-230: 1.1.sta01056
|
||||
sel_port-231: 1.1.sta00556
|
||||
sel_port-232: 1.1.sta01556
|
||||
sel_port-233: 1.1.sta00057
|
||||
sel_port-234: 1.1.sta01057
|
||||
sel_port-235: 1.1.sta00557
|
||||
sel_port-236: 1.1.sta01557
|
||||
sel_port-237: 1.1.sta00058
|
||||
sel_port-238: 1.1.sta01058
|
||||
sel_port-239: 1.1.sta00558
|
||||
sel_port-240: 1.1.sta01558
|
||||
sel_port-241: 1.1.sta00059
|
||||
sel_port-242: 1.1.sta01059
|
||||
sel_port-243: 1.1.sta00559
|
||||
sel_port-244: 1.1.sta01559
|
||||
sel_port-245: 1.1.sta00060
|
||||
sel_port-246: 1.1.sta01060
|
||||
sel_port-247: 1.1.sta00560
|
||||
sel_port-248: 1.1.sta01560
|
||||
sel_port-249: 1.1.sta00061
|
||||
sel_port-250: 1.1.sta01061
|
||||
sel_port-251: 1.1.sta00561
|
||||
sel_port-252: 1.1.sta01561
|
||||
sel_port-253: 1.1.sta00062
|
||||
sel_port-254: 1.1.sta01062
|
||||
sel_port-255: 1.1.sta00562
|
||||
sel_port-256: 1.1.sta01562
|
||||
sel_port-257: 1.1.sta00063
|
||||
sel_port-258: 1.1.sta01063
|
||||
sel_port-259: 1.1.sta00563
|
||||
sel_port-260: 1.1.sta01563
|
||||
show_events: 1
|
||||
show_log: 0
|
||||
port_sorting: 2
|
||||
kpi_id: WiFi Capacity
|
||||
bg: 0xE0ECF8
|
||||
test_rig:
|
||||
show_scan: 1
|
||||
auto_helper: 1
|
||||
skip_2: 0
|
||||
skip_5: 0
|
||||
batch_size: 1,5,10,20,40,80
|
||||
loop_iter: 1
|
||||
duration: 30000
|
||||
test_groups: 0
|
||||
test_groups_subset: 0
|
||||
protocol: TCP-IPv4
|
||||
dl_rate_sel: Total Download Rate:
|
||||
dl_rate: 1000000000
|
||||
ul_rate_sel: Total Upload Rate:
|
||||
ul_rate: 1000000000
|
||||
prcnt_tcp: 100000
|
||||
l4_endp:
|
||||
pdu_sz: -1
|
||||
mss_sel: 1
|
||||
sock_buffer: 0
|
||||
ip_tos: 0
|
||||
multi_conn: -1
|
||||
min_speed: -1
|
||||
ps_interval: 60-second Running Average
|
||||
fairness: 0
|
||||
naptime: 0
|
||||
before_clear: 5000
|
||||
rpt_timer: 1000
|
||||
try_lower: 0
|
||||
rnd_rate: 1
|
||||
leave_ports_up: 0
|
||||
down_quiesce: 0
|
||||
udp_nat: 1
|
||||
record_other_ssids: 0
|
||||
clear_reset_counters: 0
|
||||
do_pf: 0
|
||||
pf_min_period_dl: 128000
|
||||
pf_min_period_ul: 0
|
||||
pf_max_reconnects: 0
|
||||
use_mix_pdu: 0
|
||||
pdu_prcnt_pps: 1
|
||||
pdu_prcnt_bps: 0
|
||||
pdu_mix_ln-0:
|
||||
show_scan: 1
|
||||
show_golden_3p: 0
|
||||
save_csv: 0
|
||||
show_realtime: 1
|
||||
show_pie: 1
|
||||
show_per_loop_totals: 1
|
||||
show_cx_time: 1
|
||||
show_dhcp: 1
|
||||
show_anqp: 1
|
||||
show_4way: 1
|
||||
show_latency: 1
|
||||
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
|
||||
DUT is an Edge-Core 5410, running TIP OpenWrt.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user