mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-12 02:21:29 +08:00
refactor: mount ios developer image
This commit is contained in:
@@ -31,7 +31,7 @@ var mountCmd = &cobra.Command{
|
||||
return err
|
||||
}
|
||||
|
||||
images, errImage := device.ListImage()
|
||||
images, errImage := device.ListImages()
|
||||
if err != nil {
|
||||
return fmt.Errorf("list device images failed: %v", err)
|
||||
}
|
||||
@@ -43,7 +43,7 @@ var mountCmd = &cobra.Command{
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ var mountCmd = &cobra.Command{
|
||||
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)
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ var (
|
||||
|
||||
func init() {
|
||||
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")
|
||||
iosRootCmd.AddCommand(mountCmd)
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
v5.0.0+2412121405
|
||||
v5.0.0+2412121753
|
||||
|
||||
@@ -331,7 +331,7 @@ const (
|
||||
)
|
||||
|
||||
func (dev *IOSDevice) Init() error {
|
||||
images, err := dev.ListImage()
|
||||
images, err := dev.ListImages()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -340,38 +340,13 @@ func (dev *IOSDevice) Init() error {
|
||||
return err
|
||||
}
|
||||
if len(images) == 0 && version.LessThan(ios.IOS17()) {
|
||||
// Notice: iOS 17.0+ does not need to mount developer image
|
||||
err = dev.AutoMountImage(os.TempDir())
|
||||
if err != nil {
|
||||
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
|
||||
}
|
||||
|
||||
@@ -599,19 +574,17 @@ func (dev *IOSDevice) GetAppInfo(packageName string) (appInfo installationproxy.
|
||||
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)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("failed to list image")
|
||||
return
|
||||
return nil, errors.Wrap(code.DeviceConnectionError, err.Error())
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
signatures, err := conn.ListImages()
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("failed to list image")
|
||||
return
|
||||
return nil, errors.Wrap(code.DeviceConnectionError, err.Error())
|
||||
}
|
||||
|
||||
for _, sig := range signatures {
|
||||
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) {
|
||||
log.Info().Str("imagePath", imagePath).Msg("mount ios developer image")
|
||||
conn, err := imagemounter.NewImageMounter(dev.d)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("failed to mount image")
|
||||
return
|
||||
return errors.Wrap(code.DeviceConnectionError, err.Error())
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
err = conn.MountImage(imagePath)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("failed to mount image")
|
||||
return
|
||||
return errors.Wrapf(code.DeviceConnectionError,
|
||||
"mount ios developer image failed: %v", err)
|
||||
}
|
||||
log.Info().Str("imagePath", imagePath).Msg("mount ios developer image success")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (dev *IOSDevice) AutoMountImage(basedir string) (err error) {
|
||||
imagePath, err := imagemounter.DownloadImageFor(dev.d, basedir)
|
||||
func (dev *IOSDevice) AutoMountImage(baseDir string) (err error) {
|
||||
log.Info().Str("baseDir", baseDir).Msg("auto mount ios developer image")
|
||||
imagePath, err := imagemounter.DownloadImageFor(dev.d, baseDir)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("failed to download ios developer image")
|
||||
return
|
||||
return errors.Wrapf(code.DeviceConnectionError,
|
||||
"download ios developer image failed: %v", err)
|
||||
}
|
||||
conn, err := imagemounter.NewImageMounter(dev.d)
|
||||
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
|
||||
return dev.MountImage(imagePath)
|
||||
}
|
||||
|
||||
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")
|
||||
return nil, err
|
||||
}
|
||||
log.Info().Str("version", version.String()).Msg("get ios device version")
|
||||
return version, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user