#must be defined for file_contexts
type qmi_test_service_exec, exec_type, file_type;

userdebug_or_eng(`
  type qmi_test_service, domain;
  domain_auto_trans(shell, qmi_test_service_exec, qmi_test_service)
  domain_auto_trans(adbd, qmi_test_service_exec, qmi_test_service)
  #enable access to loader in 64 bit system
  allow qmi_test_service shell:fd use;
  #test is launched from pseudo terminal so output goes there
  allow qmi_test_service devpts:chr_file {read write getattr ioctl};
  #to access smem log
  allow qmi_test_service smem_log_device:chr_file {read write open ioctl};
  #to enable qmuxd interface apis to access diag
  allow qmi_test_service diag_device:chr_file {read write open ioctl};
  #enable accessing the path where qmuxds named sockets are present
  #to interface with qmuxd through unix sockets
  #to access ipc router socket
  allow qmi_test_service qmi_test_service:socket {create bind ioctl read write setopt};
  #enable running test as root user => privileged process
  #enable privileged processes to bypass permission checks
  allow qmi_test_service qmi_test_service:capability {dac_override dac_read_search setgid setuid fsetid};
  #QCCI calls qmuxd API.  The API will internally require this
  qmux_socket(qmi_test_service);
  #enable accessing the system health monitor to check the system health,
  #if a request times out
  allow qmi_test_service system_health_monitor_device:chr_file rw_file_perms;
')
