mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-31 05:19:38 +08:00
refactor: mount ios developer image
This commit is contained in:
@@ -31,7 +31,7 @@ var mountCmd = &cobra.Command{
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
images, errImage := device.ListImage()
|
images, errImage := device.ListImages()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("list device images failed: %v", err)
|
return fmt.Errorf("list device images failed: %v", err)
|
||||||
}
|
}
|
||||||
@@ -43,7 +43,7 @@ var mountCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if errImage == nil && len(images) > 0 {
|
if errImage == nil && len(images) > 0 {
|
||||||
log.Info().Msg("ios developer image is already mounted")
|
log.Info().Strs("images", images).Msg("ios developer image is already mounted")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ var mountCmd = &cobra.Command{
|
|||||||
return fmt.Errorf("developer disk image directory not exist: %s", developerDiskImageDir)
|
return fmt.Errorf("developer disk image directory not exist: %s", developerDiskImageDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = device.MountImage(developerDiskImageDir); err != nil {
|
if err = device.AutoMountImage(developerDiskImageDir); err != nil {
|
||||||
return fmt.Errorf("mount developer disk image failed: %s", err)
|
return fmt.Errorf("mount developer disk image failed: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ var (
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
mountCmd.Flags().BoolVar(&listDeveloperDiskImage, "list", false, "list developer disk images")
|
mountCmd.Flags().BoolVar(&listDeveloperDiskImage, "list", false, "list developer disk images")
|
||||||
mountCmd.Flags().StringVarP(&developerDiskImageDir, "dir", "d", defaultDeveloperDiskImageDir, "specify DeveloperDiskImage directory")
|
mountCmd.Flags().StringVarP(&developerDiskImageDir, "dir", "d", defaultDeveloperDiskImageDir, "specify developer disk image directory")
|
||||||
mountCmd.Flags().StringVarP(&udid, "udid", "u", "", "specify device by udid")
|
mountCmd.Flags().StringVarP(&udid, "udid", "u", "", "specify device by udid")
|
||||||
iosRootCmd.AddCommand(mountCmd)
|
iosRootCmd.AddCommand(mountCmd)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
v5.0.0+2412121405
|
v5.0.0+2412121753
|
||||||
|
|||||||
@@ -331,7 +331,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (dev *IOSDevice) Init() error {
|
func (dev *IOSDevice) Init() error {
|
||||||
images, err := dev.ListImage()
|
images, err := dev.ListImages()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -340,38 +340,13 @@ func (dev *IOSDevice) Init() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if len(images) == 0 && version.LessThan(ios.IOS17()) {
|
if len(images) == 0 && version.LessThan(ios.IOS17()) {
|
||||||
|
// Notice: iOS 17.0+ does not need to mount developer image
|
||||||
err = dev.AutoMountImage(os.TempDir())
|
err = dev.AutoMountImage(os.TempDir())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if version.GreaterThan(semver.MustParse("17.4.0")) && dev.STUB {
|
|
||||||
info, err := tunnel.TunnelInfoForDevice(
|
|
||||||
dev.d.Properties.SerialNumber,
|
|
||||||
ios.HttpApiHost(), ios.HttpApiPort())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
dev.d.UserspaceTUNPort = info.UserspaceTUNPort
|
|
||||||
dev.d.UserspaceTUN = info.UserspaceTUN
|
|
||||||
rsdService, err := ios.NewWithAddrPortDevice(info.Address, info.RsdPort, dev.d)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer rsdService.Close()
|
|
||||||
rsdProvider, err := rsdService.Handshake()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
device, err := ios.GetDeviceWithAddress(dev.d.Properties.SerialNumber, info.Address, rsdProvider)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
device.UserspaceTUN = dev.d.UserspaceTUN
|
|
||||||
device.UserspaceTUNPort = dev.d.UserspaceTUNPort
|
|
||||||
dev.d = device
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -599,19 +574,17 @@ func (dev *IOSDevice) GetAppInfo(packageName string) (appInfo installationproxy.
|
|||||||
return installationproxy.AppInfo{}, nil
|
return installationproxy.AppInfo{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dev *IOSDevice) ListImage() (images []string, err error) {
|
func (dev *IOSDevice) ListImages() (images []string, err error) {
|
||||||
conn, err := imagemounter.NewImageMounter(dev.d)
|
conn, err := imagemounter.NewImageMounter(dev.d)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("failed to list image")
|
return nil, errors.Wrap(code.DeviceConnectionError, err.Error())
|
||||||
return
|
|
||||||
}
|
}
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
|
||||||
signatures, err := conn.ListImages()
|
signatures, err := conn.ListImages()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("failed to list image")
|
return nil, errors.Wrap(code.DeviceConnectionError, err.Error())
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, sig := range signatures {
|
for _, sig := range signatures {
|
||||||
images = append(images, fmt.Sprintf("%x", sig))
|
images = append(images, fmt.Sprintf("%x", sig))
|
||||||
}
|
}
|
||||||
@@ -619,38 +592,30 @@ func (dev *IOSDevice) ListImage() (images []string, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (dev *IOSDevice) MountImage(imagePath string) (err error) {
|
func (dev *IOSDevice) MountImage(imagePath string) (err error) {
|
||||||
|
log.Info().Str("imagePath", imagePath).Msg("mount ios developer image")
|
||||||
conn, err := imagemounter.NewImageMounter(dev.d)
|
conn, err := imagemounter.NewImageMounter(dev.d)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("failed to mount image")
|
return errors.Wrap(code.DeviceConnectionError, err.Error())
|
||||||
return
|
|
||||||
}
|
}
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
|
||||||
err = conn.MountImage(imagePath)
|
err = conn.MountImage(imagePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("failed to mount image")
|
return errors.Wrapf(code.DeviceConnectionError,
|
||||||
return
|
"mount ios developer image failed: %v", err)
|
||||||
}
|
}
|
||||||
|
log.Info().Str("imagePath", imagePath).Msg("mount ios developer image success")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dev *IOSDevice) AutoMountImage(basedir string) (err error) {
|
func (dev *IOSDevice) AutoMountImage(baseDir string) (err error) {
|
||||||
imagePath, err := imagemounter.DownloadImageFor(dev.d, basedir)
|
log.Info().Str("baseDir", baseDir).Msg("auto mount ios developer image")
|
||||||
|
imagePath, err := imagemounter.DownloadImageFor(dev.d, baseDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("failed to download ios developer image")
|
return errors.Wrapf(code.DeviceConnectionError,
|
||||||
return
|
"download ios developer image failed: %v", err)
|
||||||
}
|
}
|
||||||
conn, err := imagemounter.NewImageMounter(dev.d)
|
return dev.MountImage(imagePath)
|
||||||
if err != nil {
|
|
||||||
log.Error().Err(err).Msg("failed to init image mounter")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer conn.Close()
|
|
||||||
err = conn.MountImage(imagePath)
|
|
||||||
if err != nil {
|
|
||||||
log.Error().Err(err).Msg("failed to mount ios developer image")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dev *IOSDevice) RunXCTest(ctx context.Context, bundleID, testRunnerBundleID, xctestConfig string) (err error) {
|
func (dev *IOSDevice) RunXCTest(ctx context.Context, bundleID, testRunnerBundleID, xctestConfig string) (err error) {
|
||||||
@@ -691,6 +656,7 @@ func (dev *IOSDevice) getVersion() (version *semver.Version, err error) {
|
|||||||
log.Error().Err(err).Msg("failed to get version")
|
log.Error().Err(err).Msg("failed to get version")
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
log.Info().Str("version", version.String()).Msg("get ios device version")
|
||||||
return version, nil
|
return version, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user