Skip to content

Commit

Permalink
Release hot fix (#429)
Browse files Browse the repository at this point in the history
* Update pull_request_template.md

* [Tech Design UML] Design of agent capability discovery (#422)

* Design agent_capability

* update uml design

* Update agent/doc/UML/agent_device_management_design.puml

Co-authored-by: Nathan Bu <370788475@qq.com>

* Update agent/doc/UML/agent_device_management_design.puml

Co-authored-by: Nathan Bu <370788475@qq.com>

* Update agent/doc/UML/agent_device_management_design.puml

Co-authored-by: Nathan Bu <370788475@qq.com>

* Update agent/doc/UML/agent_device_management_design.puml

Co-authored-by: Nathan Bu <370788475@qq.com>

* update uml

* Update method naming

* update desc

---------

Co-authored-by: Nathan Bu <370788475@qq.com>

* Bump json5 from 1.0.1 to 1.0.2 in /react (#419)

Bumps [json5](https://github.com/json5/json5) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](json5/json5@v1.0.1...v1.0.2)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* [Fix] Fix undefined parsed data and invalid date (#428)

* Fix undefine parsed data and invalid date

* Update common/src/main/java/com/microsoft/hydralab/performance/parsers/AndroidBatteryInfoResultParser.java

Co-authored-by: Yang Zhang <394054963@qq.com>

---------

Co-authored-by: Yang Zhang <394054963@qq.com>

* Start WDA proxy if we need ios driver before test start (#426)

* Start WDA proxy if we need ios driver before test start
* Change some implement for ios device

---------

Co-authored-by: Millard <hodin@microsoft.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Nathan Bu <370788475@qq.com>
Co-authored-by: Le Zhou <2428499107@qq.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ran Tao <1252026067@qq.com>
Co-authored-by: Yang Zhang <394054963@qq.com>
Co-authored-by: Millard <hodin@microsoft.com>
  • Loading branch information
7 people committed Apr 13, 2023
1 parent 6b86f8c commit dc97456
Show file tree
Hide file tree
Showing 15 changed files with 162 additions and 219 deletions.
1 change: 1 addition & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
Please check the type of change your PR introduces:
- [ ] Bugfix
- [ ] Feature
- [ ] Technical design
- [ ] Build related changes
- [ ] Refactoring (no functional changes, no api changes)
- [ ] Code style update (formatting, renaming) or Documentation content changes
Expand Down
86 changes: 86 additions & 0 deletions agent/doc/UML/agent_device_management_design.puml
Original file line number Diff line number Diff line change
Expand Up @@ -154,4 +154,90 @@ LinuxScanner -u-|> EnvCapabilityScanner
MacOSScanner -u-|> EnvCapabilityScanner

EnvCapabilityScanner .. EnvCapability: produce
@enduml

@startuml agent_capability_design

class AgentManagementService {
EnvInfo envInfo;
List<AgentFunctionAvailability> functionAvailabilities;
registerFunctionAvailability(String serviceName,ServiceType,boolean isEnabled, List<EnvCapabilityRequirement>)
}
AgentManagementService -r-> EnvCapabilityDiscoveryService
class TestRunner{
List<EnvCapabilityRequirement>
}
class DeviceDriver{
List<EnvCapabilityRequirement>
}

TestRunner -r-> AgentManagementService
DeviceDriver -r-> AgentManagementService
TestRunner --> EnvCapabilityRequirement
DeviceDriver --> EnvCapabilityRequirement

class EnvCapabilityRequirement{
+private boolean isReady
+EnvCapability envCapability
+boolean meet(EnvCapability envCapability)
}
enum AgentFunctionType{
TEST_RUNNER
DEVICE_DRIVER
}
class AgentFunctionAvailability{
+AgentFunctionType functionType
+String functionName
+List<EnvCapabilityRequirement> envCapabilityRequirements
+boolean enabled
+boolean available
}
AgentManagementService -->AgentFunctionAvailability
AgentFunctionAvailability ..> AgentFunctionType
class AgentUser{
List<AgentFunctionAvailability> functionAvailabilities;
}
AgentManagementService ..> AgentUser : provide
@enduml

@startuml agent_capability_design_sequence
participant SpringContainer
participant EnvCapabilityDiscoveryService
participant AgentManagementService
participant DeviceDriverManager
participant TestRunner
participant AgentWebSocketClientService
participant CenterApplication

activate SpringContainer
activate CenterApplication
SpringContainer --> EnvCapabilityDiscoveryService : createBean
activate EnvCapabilityDiscoveryService
EnvCapabilityDiscoveryService --> EnvCapabilityDiscoveryService : discoverEnvCapability
SpringContainer --> AgentManagementService : createBean
activate AgentManagementService
EnvCapabilityDiscoveryService --> AgentManagementService : provideEnvCapability
deactivate EnvCapabilityDiscoveryService
SpringContainer --> DeviceDriverManager : createDriverManager
activate DeviceDriverManager
DeviceDriverManager --> DeviceDriverManager : add deviceDrivers
deactivate DeviceDriverManager
SpringContainer --> AgentManagementService : registerDriverAvailability

SpringContainer --> TestRunner : createBean
activate TestRunner
TestRunner --> TestRunner : init
TestRunner --> AgentManagementService : registerRunnerAvailability
deactivate TestRunner
SpringContainer --> AgentWebSocketClientService : createBean
activate AgentWebSocketClientService
AgentWebSocketClientService --> AgentWebSocketClientService : buildAgentUser
AgentWebSocketClientService --> AgentManagementService : getServiceAvailabilities
AgentManagementService --> AgentWebSocketClientService : return serviceAvailabilities
deactivate AgentManagementService
AgentWebSocketClientService --> CenterApplication : provide agent info
CenterApplication --> CenterApplication : display agent info
deactivate CenterApplication
deactivate AgentWebSocketClientService
deactivate SpringContainer
@enduml
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ private void runAppiumT2CTest(TestRunDevice testRunDevice, File jsonFile, Logger
reportLogger.info("Successfully init a Edge driver");
}
if (driverInfo.getPlatform().equalsIgnoreCase(DeviceType.IOS.name())) {
deviceInfo = getDeviceByType(testRunDevice, DeviceType.ANDROID.name());
deviceInfo = getDeviceByType(testRunDevice, DeviceType.IOS.name());
IOSDriverController iosDriverController = new IOSDriverController(
appiumServerManager.getIOSDriver(deviceInfo, reportLogger),
deviceInfo.getSerialNum(), reportLogger);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import javax.persistence.Id;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.sql.Date;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.UUID;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,10 @@ public IOSDriver getIOSDriver(DeviceInfo deviceInfo, Logger logger) {
}

int wdaPort = IOSUtils.getWdaPortByUdid(udid, logger);
if (!IOSUtils.isWdaRunningByPort(wdaPort, logger)) {
IOSUtils.proxyWDA(deviceInfo, logger);
}

DesiredCapabilities caps = new DesiredCapabilities();

caps.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 4000);
Expand Down Expand Up @@ -274,6 +278,7 @@ public WindowsDriver getWindowsRootDriver(Logger logger) {

public Boolean isDriverAlive(AppiumDriver driver) {
try {
driver.getStatus();
driver.getScreenshotAs(OutputType.FILE);
return true;
} catch (WebDriverException e) {
Expand Down Expand Up @@ -393,6 +398,8 @@ public void quitIOSDriver(DeviceInfo deviceInfo, Logger logger) {
} catch (Exception e) {
logger.info("Error happened when quitting driver for device: " + udid);
e.printStackTrace();
} finally {
IOSUtils.killProxyWDA(deviceInfo, logger);
}
}
iOSDrivers.remove(udid);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ public boolean grantProjectionAndBatteryPermission(DeviceInfo deviceInfo, String

@Override
public void testDeviceSetup(DeviceInfo deviceInfo, Logger logger) {
IOSUtils.proxyWDA(deviceInfo, logger);

}

@Override
Expand All @@ -263,7 +263,7 @@ public void removeFileInDevice(DeviceInfo deviceInfo, String pathOnDevice, Logge

@Override
public void testDeviceUnset(DeviceInfo deviceInfo, Logger logger) {
IOSUtils.killProxyWDA(deviceInfo, logger);

}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ private IOSPerfTestHelper() {
needUpdate = true;
} else {
String[] currentVersionParts = versionString.trim().split("\\.");
String[] lowestVersionParts = versionString.trim().split("\\.");
String[] lowestVersionParts = lowestVersion.trim().split("\\.");
for (int i = 0; i < currentVersionParts.length; i++) {
int currentPart = Integer.parseInt(currentVersionParts[i]);
int requiredPart = Integer.parseInt(lowestVersionParts[i]);
Expand Down Expand Up @@ -80,7 +80,7 @@ public void stop(String key) {

public static IOSPerfTestHelper getInstance() {
if (instance == null) {
synchronized (instance) {
synchronized (IOSPerfTestHelper.class) {
if (instance == null) {
instance = new IOSPerfTestHelper();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public static String getAppList(String udid, Logger logger) {
}

public static void installApp(String udid, String packagePath, Logger logger) {
ShellUtils.execLocalCommand(String.format("tidevice -u %s install %s", udid, packagePath.replace(" ", "\\ ")), logger);
ShellUtils.execLocalCommand(String.format("tidevice -u %s install \"%s\"", udid, packagePath.replace(" ", "\\ ")), logger);
}

@Nullable
Expand All @@ -97,6 +97,9 @@ public static void stopApp(String udid, String packageName, Logger logger) {
public static void proxyWDA(DeviceInfo deviceInfo, Logger logger) {
String udid = deviceInfo.getSerialNum();
int wdaPort = getWdaPortByUdid(udid, logger);
if (isWdaRunningByPort(wdaPort, logger)) {
return;
}
// String command = "tidevice -u " + udid + " wdaproxy -B " + WDA_BUNDLE_ID + " --port " + getWdaPortByUdid(udid, logger);
String portRelayCommand = "tidevice -u " + udid + " relay " + wdaPort + " 8100";
String startWDACommand = "tidevice -u " + udid + " xctest --bundle_id " + WDA_BUNDLE_ID;
Expand All @@ -112,6 +115,7 @@ public static void killProxyWDA(DeviceInfo deviceInfo, Logger logger) {
String udid = deviceInfo.getSerialNum();
int wdaPort = getWdaPortByUdid(udid, logger);
// String command = "tidevice -u " + udid + " wdaproxy -B " + WDA_BUNDLE_ID + " --port " + getWdaPortByUdid(udid, logger);
// We can still try to kill the process even the proxy is not running.
String portRelayCommand = "tidevice -u " + udid + " relay " + wdaPort + " 8100";
String startWDACommand = "tidevice -u " + udid + " xctest --bundle_id " + WDA_BUNDLE_ID;

Expand All @@ -125,7 +129,7 @@ public static String getIOSDeviceDetailInfo(String udid, Logger logger) {
}

public static void takeScreenshot(String udid, String screenshotFilePath, Logger logger) {
ShellUtils.execLocalCommand("tidevice -u " + udid + " screenshot " + screenshotFilePath, logger);
ShellUtils.execLocalCommand("tidevice -u " + udid + " screenshot \"" + screenshotFilePath + "\"", logger);
}

public static boolean isWdaRunningByPort(int port, Logger logger) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import com.microsoft.hydralab.performance.PerformanceResultParser;
import com.microsoft.hydralab.performance.PerformanceTestResult;
import com.microsoft.hydralab.performance.entity.AndroidBatteryInfo;
import org.apache.commons.lang3.SerializationUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -43,13 +42,29 @@ public PerformanceTestResult parse(PerformanceTestResult performanceTestResult)
}

// Use the battery usage at the end of the test as a summary
performanceTestResult.setResultSummary(SerializationUtils.clone(
(AndroidBatteryInfo) inspectionResults.get(inspectionResults.size() - 1).parsedData));
performanceTestResult.setResultSummary(getResultSummary(inspectionResults));
return performanceTestResult;
}

private AndroidBatteryInfo getResultSummary(List<PerformanceInspectionResult> inspectionResults) {
if (inspectionResults == null || inspectionResults.isEmpty()) {
return null;
}

for (int i = inspectionResults.size() - 1; i >= 0; i--) {
PerformanceInspectionResult inspectionResult = inspectionResults.get(i);
if (inspectionResult.parsedData != null) {
return (AndroidBatteryInfo) inspectionResult.parsedData;
}
}

return null;
}

private AndroidBatteryInfo parseRawResultFile(File rawFile, String packageName) {
if (!rawFile.isFile() || !rawFile.exists()) return null;
if (!rawFile.isFile()) {
return null;
}

AndroidBatteryInfo batteryInfo = new AndroidBatteryInfo();
float totalUsage = 0.0f;
Expand Down
Binary file added docs/images/UML/agent_capability_design.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit dc97456

Please sign in to comment.