Xi Zhang

368 papers A* 22A 5B 114C 13Misc 34Journal 98Unranked 82
YearRankTypeTitle / Venue / Authors
2026 J jnl
Comput. Networks
Zheng Lu, Fei Wang, Xi Zhang
2025 J jnl
IEEE Wirel. Commun. Lett.
Fan Yang, Xi Zhang
2025 B conf
ISIT
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2025 J jnl
IEEE Trans. Wirel. Commun.
Zhian Chen, Fei Wang, Xi Zhang
2025 J jnl
Int. J. Intell. Syst.
Zhongkai Wei, Ye Su, Xi Zhang, Haining Yang, Jing Qin, Jixin Ma
2025 J jnl
IEEE Wirel. Commun. Lett.
Fei Wang, Xi Zhang
2025 B conf
GLOBECOM
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2024 J jnl
IEEE Trans. Knowl. Data Eng.
Jinlu Liu, Jing Qin, Xi Zhang, Huaxiong Wang
2024 conf
INFOCOM (Workshops)
Xi Zhang, Qixuan Zhu
2024 conf
ICC
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2024 conf
ICC
Xi Zhang, Qixuan Zhu
2024 Misc conf
CISS
Xi Zhang, Qixuan Zhu
2024 B conf
GLOBECOM
Jiaojie Wang, Fei Wang, Xi Zhang, Yuanyuan Yang
2024 J jnl
IEEE J. Sel. Top. Signal Process.
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2024 J jnl
IEEE J. Sel. Areas Commun.
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2024 J jnl
Comput. J.
Xi Zhang, Ye Su, Jing Qin, Jiameng Sun
2024 J jnl
IEEE Trans. Serv. Comput.
Xi Zhang, Cheng Huang, Ye Su, Jing Qin
2024 conf
ICC
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2023 J jnl
Comput. J.
Qing Wang, Xi Zhang, Jing Qin, Jixin Ma, Xinyi Huang
2023 J jnl
IEEE Netw.
Xi Zhang, Qixuan Zhu
2023 Misc conf
CISS
Fei Wang, Xi Zhang
2023 conf
AIS&P (1)
Xi Zhang, Ye Su, Zhongkai Wei, Wenting Shen, Jing Qin
2023 J jnl
IEEE Internet Things J.
Ye Su, Xi Zhang, Jing Qin, Jixin Ma
2023 Misc conf
CISS
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2023 conf
MILCOM
Shuming Yi, Fei Wang, Xi Zhang
2023 J jnl
IEEE Trans. Veh. Technol.
Yuedong Li, Fei Wang, Xi Zhang, Songtao Guo
2023 conf
ICC
Fei Wang, Xi Zhang
2023 conf
ICC
Zhian Chen, Fei Wang, Xi Zhang
2023 Misc conf
CISS
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2023 B conf
ISIT
Xi Zhang, Jingqing Wang, H. Vincent Poor
2023 J jnl
Comput. J.
Jinlu Liu, Bo Zhao, Jing Qin, Xi Zhang, Jixin Ma
2023 J jnl
IEEE Trans. Wirel. Commun.
Fei Wang, Xi Zhang
2023 conf
AIS&P (1)
Wenchao Wang, Jing Qin, Jinlu Liu, Xi Zhang, Xinyi Hou, Zhongkai Wei
2023 Misc conf
CISS
Xi Zhang, Jingqing Wang, H. Vincent Poor
2022 conf
MILCOM
Xi Zhang, Qixuan Zhu
2022 B conf
ISIT
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2022 B conf
GLOBECOM
Xi Zhang, Cheng Huang, Ye Su, Jing Qin, Xuemin Shen
2022 B conf
WCNC
Fei Wang, Xi Zhang
2022 A conf
ICDCS
Xi Zhang, Jingqing Wang, H. Vincent Poor
2022 J jnl
IEEE Veh. Technol. Mag.
Xi Zhang, Jingqing Wang, H. Vincent Poor
2022 B conf
WCNC
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2022 Misc conf
CISS
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2022 B conf
WCNC
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2022 B conf
ISIT
Xi Zhang, Jingqing Wang, H. Vincent Poor
2022 Misc conf
CISS
Xi Zhang, Jingqing Wang, H. Vincent Poor
2022 B conf
GLOBECOM
Xi Zhang, Qixuan Zhu
2022 B conf
ISIT
Xi Zhang, Jingqing Wang, H. Vincent Poor
2021 Misc conf
CISS
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2021 B conf
ISIT
Xi Zhang, Jingqing Wang, H. Vincent Poor
2021 Misc conf
CISS
Xi Zhang, Jingqing Wang, H. Vincent Poor
2021 J jnl
IEEE J. Sel. Areas Commun.
Xi Zhang, Jingqing Wang, H. Vincent Poor
2021 conf
ICC
Xi Zhang, Jingqing Wang, H. Vincent Poor
2021 J jnl
IEEE J. Sel. Top. Signal Process.
Fei Wang, Xi Zhang
2021 B conf
GLOBECOM
Fei Wang, Xi Zhang
2021 A* conf
INFOCOM
Xi Zhang, Jingqing Wang, H. Vincent Poor
2021 J jnl
IEEE J. Sel. Areas Commun.
Xi Zhang, Jingqing Wang, H. Vincent Poor
2021 J jnl
Int. J. Intell. Syst.
Xi Zhang, Bo Zhao, Jing Qin, Wei Hou, Ye Su, Haining Yang
2021 Misc conf
CISS
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2021 A* conf
INFOCOM
Xi Zhang, Jingqing Wang, H. Vincent Poor
2021 J jnl
IEEE J. Sel. Top. Signal Process.
Xi Zhang, Jingqing Wang, H. Vincent Poor
2021 Misc conf
CISS
Xi Zhang, Jingqing Wang, H. Vincent Poor
2021 J jnl
IEEE J. Sel. Areas Commun.
Xi Zhang, Jingqing Wang, H. Vincent Poor
2021 B conf
GLOBECOM
Xi Zhang, Jingqing Wang, H. Vincent Poor
2021 A conf
ICDCS
Xi Zhang, Qixuan Zhu
2020 J jnl
Secur. Commun. Networks
Xi Zhang, Ye Su, Jing Qin
2020 B conf
GLOBECOM
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2020 conf
SPAWC
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2020 conf
ICC
Jianqiao Chen, Xi Zhang, Ping Zhang
2020 Misc conf
CISS
Jianqiao Chen, Xi Zhang
2020 J jnl
IEEE Trans. Wirel. Commun.
Jingqing Wang, Xi Zhang
2020 conf
ICC
Jianqiao Chen, Xi Zhang, Ping Zhang
2020 conf
ICC
Xi Zhang, Qixuan Zhu
2020 B conf
GLOBECOM
Xi Zhang, Jingqing Wang, H. Vincent Poor
2020 B conf
GLOBECOM
Xi Zhang, Jingqing Wang, H. Vincent Poor
2020 B conf
GLOBECOM
Fan Yang, Xi Zhang, Shi Chen
2020 B conf
GLOBECOM
Xi Zhang, Qixuan Zhu
2020 conf
ICC
Fan Yang, Xi Zhang
2020 B conf
GLOBECOM
Fan Yang, Xi Zhang
2020 conf
ICC
Fei Wang, Xi Zhang
2020 B conf
ISIT
Xi Zhang, Qixuan ZW, H. Vincent Poor
2020 J jnl
IEEE J. Sel. Areas Commun.
Xi Zhang, Jingqing Wang, H. Vincent Poor
2020 Misc conf
CISS
Xi Zhang, Jingqing Wang, H. Vincent Poor
2020 conf
SPAWC
Xi Zhang, Jingqing Wang, H. Vincent Poor
2020 B conf
GLOBECOM
Jianqiao Chen, Xi Zhang
2019 A* conf
INFOCOM
Xi Zhang, Qixuan Zhu
2019 B conf
GLOBECOM
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2019 conf
ICC
Gang Liu, Xianhao Chen, Zheng Ma, Xi Zhang, Ming Xiao, Pingzhi Fan
2019 J jnl
IEEE Trans. Cloud Comput.
Xi Zhang, Qixuan Zhu
2019 A conf
ICDCS
Xi Zhang, Jingqing Wang
2019 A conf
ICDCS
Xi Zhang, Jingqing Wang
2019 J jnl
IEEE J. Sel. Areas Commun.
Xi Zhang, Jingqing Wang, H. Vincent Poor
2019 J jnl
IEEE J. Sel. Areas Commun.
Xi Zhang, Qixuan Zhu
2019 B conf
GLOBECOM
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2019 B conf
GLOBECOM
Xi Zhang, Jingqing Wang, H. Vincent Poor
2019 B conf
GLOBECOM
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2019 conf
ICC
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2019 J jnl
IEEE Trans. Wirel. Commun.
Xianhao Chen, Gang Liu, Zheng Ma, Xi Zhang, WeiQiang Xu, Pingzhi Fan
2019 B conf
GLOBECOM
Xi Zhang, Jingqing Wang, H. Vincent Poor
2019 conf
iThings/GreenCom/CPSCom/SmartData
Xi Zhang, Jingqing Wang, Qixuan Zhu
2019 B conf
GLOBECOM
Xi Zhang, Jingqing Wang, H. Vincent Poor
2019 J jnl
IEEE J. Sel. Areas Commun.
Xi Zhang, Fei Wang
2019 B conf
GLOBECOM
Xi Zhang, Qixuan Zhu, H. Vincent Poor
2019 conf
ICC
Xi Zhang, Jingqing Wang, H. Vincent Poor
2019 conf
ICC
Xi Zhang, Jingqing Wang, H. Vincent Poor
2019 Misc conf
CISS
Xi Zhang, Jingqing Wang, H. Vincent Poor
2019 J jnl
IEEE Trans. Mob. Comput.
Honghai Wu, Liang Liu, Xi Zhang, Huadong Ma
2019 J jnl
CoRR
Xianhao Chen, Gang Liu, Zheng Ma, Xi Zhang, Pingzhi Fan, Shanzhi Chen, F. Richard Yu
2019 J jnl
IEEE Wirel. Commun.
Xianhao Chen, Gang Liu, Zheng Ma, Xi Zhang, Pingzhi Fan, Shanzhi Chen, F. Richard Yu
2019 B conf
GLOBECOM
Xi Zhang, Jingqing Wang, H. Vincent Poor
2018 B conf
GLOBECOM
Jianqiao Chen, Ping Zhang, Xi Zhang, Xiaoli Yang, Nan Ma
2018 conf
ICC
Xi Zhang, Qixuan Zhu
2018 conf
ICC
Fei Wang, Xi Zhang
2018 conf
INFOCOM Workshops
Fei Wang, Xi Zhang
2018 J jnl
IEEE J. Sel. Areas Commun.
Xi Zhang, Wenchi Cheng, Hailin Zhang
2018 conf
ICC
Xi Zhang, Jingqing Wang
2018 J jnl
IEEE Wirel. Commun.
Xi Zhang, Qixuan Zhu
2018 conf
MILCOM
Xi Zhang, Qixuan Zhu
2018 J jnl
CoRR
Xi Zhang, Jingyuan Chou, Fei Wang
2018 conf
ICC
Fei Wang, Xi Zhang
2018 Misc conf
CISS
Xi Zhang, Jingqing Wang
2018 J jnl
IEEE Trans. Veh. Technol.
Fei Wang, Songtao Guo, Bin Xiao, Yuanyuan Yang, Xi Zhang
2018 B conf
GLOBECOM
Fei Wang, Xi Zhang
2018 B conf
GLOBECOM
Fei Wang, Xi Zhang
2018 J jnl
IEEE J. Sel. Areas Commun.
Xi Zhang, Qixuan Zhu
2018 conf
ICC
Fei Wang, Xi Zhang
2018 conf
INFOCOM Workshops
Xi Zhang, Qixuan Zhu
2018 conf
ICC
Jingqing Wang, Xi Zhang
2018 conf
INFOCOM Workshops
Xi Zhang, Jingqing Wang
2017 conf
INFOCOM Workshops
Xi Zhang, Qixuan Zhu
2017 B conf
WCNC
Xi Zhang, Jingqing Wang
2017 B conf
WCNC
Xi Zhang, Fan Yang
2017 J jnl
CoRR
Bassem Khalfi, Bechir Hamdaoui, Mahdi Ben Ghorbel, Mohsen Guizani, Xi Zhang, Nizar Zorba
2017 J jnl
IEEE Trans. Veh. Technol.
Bassem Khalfi, Bechir Hamdaoui, Mahdi Ben Ghorbel, Mohsen Guizani, Xi Zhang, Nizar Zorba
2017 A* conf
INFOCOM
Wenchi Cheng, Xi Zhang, Hailin Zhang
2017 Misc conf
CISS
Fei Wang, Xi Zhang
2017 Misc conf
CISS
Fei Wang, Xi Zhang
2017 A* conf
INFOCOM
Fei Wang, Xi Zhang
2017 Misc conf
CISS
Xi Zhang, Qixuan Zhu
2017 Misc conf
CISS
Xi Zhang, Fan Yang
2017 B conf
WCNC
Jingqing Wang, Xi Zhang
2017 B conf
WCNC
Xi Zhang, Jingqing Wang
2017 conf
INFOCOM Workshops
Xi Zhang, Jingqing Wang
2017 Misc conf
CISS
Xi Zhang, Jingqing Wang
2017 conf
MILCOM
Xi Zhang, Qixuan Zhu
2016 J jnl
Wirel. Commun. Mob. Comput.
Weiping Wang, Xiaozhuan Chen, Mingming Lu, Jianxin Wang, Xi Zhang, Jie Wu
2016 B conf
GLOBECOM
Wenchi Cheng, Xi Zhang, Hailin Zhang
2016 B conf
GLOBECOM
Fan Yang, Xi Zhang
2016 B conf
GLOBECOM
Qixuan Zhu, Xi Zhang
2016 conf
WUWNet
Xi Zhang, Qixuan Zhu, Jingqing Wang
2016 J jnl
Wirel. Commun. Mob. Comput.
Xiang Yang, Weiping Wang, Mingming Lu, Jianxin Wang, Xi Zhang
2016 B conf
GLOBECOM
Jingqing Wang, Xi Zhang
2016 conf
MILCOM
Xi Zhang, Qixuan Zhu
2016 conf
INFOCOM Workshops
Bassem Khalfi, Bechir Hamdaoui, Mahdi Ben Ghorbel, Mohsen Guizani, Xi Zhang
2016 conf
INFOCOM Workshops
Fei Wang, Xi Zhang
2016 B conf
GLOBECOM
Qixuan Zhu, Xi Zhang
2016 J jnl
IEEE J. Sel. Areas Commun.
Wenchi Cheng, Xi Zhang, Hailin Zhang
2016 B conf
GLOBECOM
Xi Zhang, Qixuan Zhu
2016 B conf
GLOBECOM
Fan Yang, Xi Zhang
2016 A* conf
INFOCOM
Honghai Wu, Liang Liu, Xi Zhang, Huadong Ma
2016 B conf
GLOBECOM
Fei Wang, Xi Zhang
2016 B conf
GLOBECOM
Jingqing Wang, Xi Zhang
2016 conf
WUWNet
Jingqing Wang, Xi Zhang
2016 J jnl
IEEE J. Sel. Areas Commun.
Wenchi Cheng, Xi Zhang, Hailin Zhang
2016 J jnl
IEEE Commun. Mag.
Xi Zhang, Jun-Hong Cui, Santanu Das, Mario Gerla, Mandar A. Chitre
2015 B conf
GLOBECOM
Jingqing Wang, Xi Zhang
2015 conf
INFOCOM Workshops
Qixuan Zhu, Xi Zhang
2015 B conf
WCNC
Shan Jin, Xi Zhang
2015 B conf
WCNC
Jingqing Wang, Xi Zhang
2015 B conf
WCNC
Shan Jin, Xi Zhang
2015 B conf
GLOBECOM
Qixuan Zhu, Xi Zhang
2015 B conf
WCNC
Ping Wang, Xi Zhang, Genshe Chen
2015 B conf
WCNC
Shan Jin, Xi Zhang
2015 J jnl
IEEE J. Sel. Areas Commun.
Wenchi Cheng, Xi Zhang, Hailin Zhang
2015 J jnl
IEEE Wirel. Commun.
Xi Zhang, Wenchi Cheng, Hailin Zhang
2015 B conf
GLOBECOM
Qixuan Zhu, Xi Zhang
2015 Misc conf
CISS
Qixuan Zhu, Xi Zhang
2015 B conf
GLOBECOM
Wenchi Cheng, Xi Zhang, Hailin Zhang
2015 A* conf
INFOCOM
Wenchi Cheng, Xi Zhang, Hailin Zhang
2015 J jnl
IEEE Netw.
Chengchao Liang, F. Richard Yu, Xi Zhang
2015 Misc conf
CISS
Shan Jin, Xi Zhang
2015 B conf
GLOBECOM
Fan Yang, Xi Zhang
2015 B conf
WCNC
Ping Wang, Xi Zhang
2015 conf
WUWNet
Jingqing Wang, Xi Zhang, Qixuan Zhu
2015 conf
MILCOM
Qixuan Zhu, Xi Zhang
2015 conf
WUWNet
Xi Zhang, Qixuan Zhu
2015 J jnl
IEEE Commun. Mag.
Xi Zhang, Jun-Hong Cui, Santanu Das, Mario Gerla, Mandar A. Chitre
2014 B conf
GLOBECOM
Jingqing Wang, Xi Zhang
2014 J jnl
Ad Hoc Sens. Wirel. Networks
Zhixiong Liu, Jianxin Wang, Shigeng Zhang, Huafu Liu, Xi Zhang
2014 conf
MILCOM
Jingqing Wang, Xi Zhang
2014 conf
ICC
Ping Wang, Jiahao Li, Xi Zhang
2014 Misc conf
CISS
Fan Yang, Xi Zhang
2014 B conf
GLOBECOM
Shan Jin, Xi Zhang
2014 conf
MILCOM
Fan Yang, Xi Zhang
2014 B conf
GLOBECOM
Fan Yang, Xi Zhang
2014 B conf
GLOBECOM
Shan Jin, Xi Zhang
2014 J jnl
Inf. Sci.
Jianxin Wang, Zhixiong Liu, Shigeng Zhang, Xi Zhang
2014 B conf
GLOBECOM
Fan Yang, Xi Zhang
2014 conf
WUWNet
Ping Wang, Xi Zhang
2014 B conf
GLOBECOM
Wenchi Cheng, Xi Zhang, Hailin Zhang
2014 J jnl
IEEE Netw.
Xi Zhang, Wenchi Cheng, Hailin Zhang
2014 J jnl
Wirel. Commun. Mob. Comput.
Liang Liu, Xi Zhang, Huadong Ma
2014 B conf
GLOBECOM
Zhuofan Liao, Xi Zhang, Chaochao Feng
2014 B conf
GLOBECOM
Wenchi Cheng, Xi Zhang, Hailin Zhang
2014 B conf
GLOBECOM
Ping Wang, Xi Zhang, Genshe Chen, Khanh Pham, Erik Blasch
2014 conf
ICC
Fan Yang, Xi Zhang
2013 B conf
GLOBECOM
Lijun Xie, Xi Zhang
2013 J jnl
Ad Hoc Sens. Wirel. Networks
Zhuofan Liao, Jianxin Wang, Shigeng Zhang, Xi Zhang
2013 Misc conf
CISS
Fan Yang, Xi Zhang, Jingsong Leng
2013 conf
ICC
Li Wang, Xi Zhang, Jingwei Mo, Mei Song
2013 Misc conf
CISS
Fan Yang, Xi Zhang, Wei Yu, Genshe Chen
2013 conf
MILCOM
Ping Wang, Xi Zhang, Mei Song
2013 Misc conf
CISS
Ping Wang, Xi Zhang
2013 J jnl
IEEE J. Sel. Areas Commun.
Wenchi Cheng, Xi Zhang, Hailin Zhang
2013 B conf
WCNC
Li Wang, Xi Zhang, Xin Ma, Mei Song
2013 A* conf
INFOCOM
Wenchi Cheng, Xi Zhang, Hailin Zhang
2013 conf
ICC
Ping Wang, Xi Zhang, Mei Song
2013 J jnl
IEEE Wirel. Commun.
Xi Zhang, Ping Wang
2013 B conf
WCNC
Li Wang, Xi Zhang, Wen Zhu, Mei Song
2013 J jnl
IEEE Trans. Commun.
Xi Zhang, Jia Tang
2013 J jnl
IEEE J. Sel. Areas Commun.
Wenchi Cheng, Xi Zhang, Hailin Zhang
2013 conf
MILCOM
Fan Yang, Xi Zhang
2013 Misc conf
CISS
Fan Yang, Xi Zhang
2012 A* conf
INFOCOM
Liang Liu, Anlong Ming, Huadong Ma, Xi Zhang
2012 B conf
GLOBECOM
Li Wang, Xi Zhang, Mei Song, Tenghui Ke
2012 B conf
GLOBECOM
Li Wang, Xi Zhang, Mei Song, Tenghui Ke
2012 J jnl
IEEE Commun. Mag.
Xi Zhang, Jiangzhou Wang, Yi Qian
2012 B conf
GLOBECOM
Fan Yang, Xi Zhang, Zhong-Pei Zhang
2012 J jnl
Wirel. Commun. Mob. Comput.
Liang Liu, Huadong Ma, Xi Zhang
2012 conf
MILCOM
Ping Wang, Xi Zhang, Mei Song, Xue Chen
2012 A* conf
INFOCOM
Wenchi Cheng, Xi Zhang, Hailin Zhang
2012 J jnl
IEEE J. Sel. Areas Commun.
Yiqing Zhou, Fumiyuki Adachi, Xiaodong Wang, Athanassios Manikas, Xi Zhang, Wei-Ping Zhu
2012 B conf
GLOBECOM
Jianliang Gao, Jianxin Wang, Xi Zhang
2012 B conf
GLOBECOM
Wenchi Cheng, Xi Zhang, Hailin Zhang
2012 conf
ICC
Wenchi Cheng, Xi Zhang, Hailin Zhang
2012 conf
WUWNet
Jun-Hong Cui, Shengli Zhou, Zhijie Shi, James O'Donnell, Zheng Peng, Mario Gerla, Burkard Baschek, Sumit Roy, Payman Arabshahi, Xi Zhang
2012 A* conf
INFOCOM
Liang Liu, Xi Zhang, Huadong Ma
2012 A* conf
INFOCOM
Liang Liu, Yuning Song, Huadong Ma, Xi Zhang
2012 conf
ICC
Wenchi Cheng, Xi Zhang, Hailin Zhang
2012 conf
MILCOM
Fan Yang, Xi Zhang, Zhong-Pei Zhang
2011 conf
ICC
Zhixiong Liu, Jianxin Wang, Xi Zhang
2011 J jnl
IEEE Trans. Autom. Control.
Xi Zhang
2011 conf
ICC
Junbin Liang, Jianxin Wang, Xi Zhang, Jianer Chen
2011 J jnl
CoRR
Qinghe Du, Xi Zhang
2011 A* conf
INFOCOM
Qinghe Du, Xi Zhang
2011 J jnl
IEEE J. Sel. Top. Signal Process.
Xi Zhang, Hang Su
2011 J jnl
CoRR
Wenchi Cheng, Xi Zhang, Hailin Zhang
2011 conf
MILCOM
Wenchi Cheng, Xi Zhang, Hailin Zhang
2011 conf
CoRoNet@MOBICOM
Wenchi Cheng, Xi Zhang, Hailin Zhang
2011 J jnl
IEEE Trans. Wirel. Commun.
Liang Liu, Xi Zhang, Huadong Ma
2011 J jnl
CoRR
Wenchi Cheng, Xi Zhang, Hailin Zhang, Qiang Wang
2011 J jnl
IEEE J. Sel. Areas Commun.
Xi Zhang, Hang Su
2011 conf
ICC
Guofeng Yan, Jianxin Wang, Xi Zhang
2011 J jnl
CoRR
Qinghe Du, Xi Zhang
2011 J jnl
IEEE J. Sel. Areas Commun.
Qinghe Du, Xi Zhang
2010 B conf
GLOBECOM
Jianxin Wang, Jing Li, Liang Rong, Xi Zhang
2010 B conf
GLOBECOM
Xi Zhang
2010 conf
ICC
Jin Wei, Xi Zhang
2010 B conf
GLOBECOM
Qinghe Du, Xi Zhang
2010 conf
ICC
Jin Wei, Xi Zhang
2010 conf
ICC
Hang Su, Xi Zhang
2010 B conf
WCNC
Zhuofan Liao, Jianxin Wang, Xie Wang, Xi Zhang
2010 J jnl
IEEE J. Sel. Areas Commun.
Jiangzhou Wang, Mingxi Fan, Xiaohu You, Xi Zhang, Hui Liu, Eckehard G. Steinbach, Laurence B. Milstein
2010 conf
ICC
Hang Su, Xi Zhang
2010 C conf
QSHINE
Hang Su, Xi Zhang
2010 B conf
GLOBECOM
Hang Su, Xi Zhang
2010 B conf
GLOBECOM
Hang Su, Xi Zhang
2010 J jnl
IEEE Trans. Veh. Technol.
Liang Liu, Xi Zhang, Huadong Ma
2010 B conf
WCNC
Hang Su, Xi Zhang
2010 conf
ICC
Qinghe Du, Xi Zhang
2010 B conf
WCNC
Jin Wei, Xi Zhang
2010 J jnl
IEEE J. Sel. Areas Commun.
Qinghe Du, Xi Zhang
2009 A* conf
INFOCOM
Huadong Ma, Xi Zhang, Anlong Ming
2009 B conf
GLOBECOM
Jin Ye, Jianxin Wang, Jiawei Huang, Xi Zhang
2009 J jnl
IEEE Commun. Lett.
Qinghe Du, Xi Zhang
2009 B conf
GLOBECOM
Jianxin Wang, Liang Rong, Xi Zhang, Jianer Chen
2009 conf
ICC
Jie Wang, Jianxin Wang, Jianer Chen, Xi Zhang
2009 J jnl
IEEE J. Sel. Areas Commun.
Hang Su, Xi Zhang
2009 A* conf
INFOCOM
Liang Liu, Xi Zhang, Huadong Ma
2009 conf
ICC
Qinghe Du, Xi Zhang
2009 conf
ICC
Liang Liu, Xi Zhang, Huadong Ma
2009 B conf
GLOBECOM
Hang Su, Xi Zhang
2009 B conf
GLOBECOM
Liang Liu, Xi Zhang, Huadong Ma
2009 J jnl
IEEE J. Sel. Areas Commun.
Hang Su, Xi Zhang
2009 J jnl
IEEE Wirel. Commun.
Xi Zhang, Hang Su
2009 B conf
GLOBECOM
Qinghe Du, Xi Zhang
2009 B conf
GLOBECOM
Hang Su, Xi Zhang
2009 Misc conf
CISS
Hang Su, Xi Zhang
2009 A* conf
INFOCOM
Qinghe Du, Xi Zhang
2009 conf
ICC
Hang Su, Xi Zhang
2008 B conf
WCNC
Liang Liu, Huadong Ma, Xi Zhang
2008 B conf
GLOBECOM
Hang Su, Xi Zhang
2008 B conf
GLOBECOM
Liang Liu, Xi Zhang, Huadong Ma
2008 C conf
WOWMOM
Hang Su, Xi Zhang
2008 Misc conf
CISS
Hang Su, Xi Zhang
2008 B conf
WCNC
Liang Liu, Huadong Ma, Xi Zhang
2008 J jnl
IEEE J. Sel. Areas Commun.
Hang Su, Xi Zhang
2008 J jnl
IEEE Trans. Wirel. Commun.
Jia Tang, Xi Zhang
2008 conf
ICC
Qinghe Du, Xi Zhang
2008 C conf
WOWMOM
Liang Liu, Xi Zhang, Huadong Ma
2008 conf
ICC
Liang Liu, Huadong Ma, Xi Zhang
2008 B conf
GLOBECOM
Qinghe Du, Xi Zhang
2008 Misc conf
CISS
Liang Liu, Huadong Ma, Xi Zhang
2008 Misc conf
CISS
Liang Liu, Xi Zhang, Huadong Ma
2008 C conf
WOWMOM
Jia Tang, Xi Zhang
2008 A* conf
INFOCOM
Qinghe Du, Xi Zhang
2008 J jnl
Wirel. Commun. Mob. Comput.
Xi Zhang, Jia Tang, Hsiao-Hwa Chen
2008 C conf
QSHINE
Jianxin Wang, Yuhong Luo, Jiawei Huang, Xi Zhang
2007 conf
ICC
Hang Su, Xi Zhang
2007 B conf
WCNC
Qinghe Du, Xi Zhang
2007 A* conf
INFOCOM
Hang Su, Xi Zhang
2007 J jnl
IEEE Trans. Veh. Technol.
Hang Su, Xi Zhang
2007 B conf
GLOBECOM
Hang Su, Xi Zhang
2007 B conf
GLOBECOM
Qinghe Du, Xi Zhang
2007 J jnl
IEEE Commun. Mag.
Xi Zhang, Qinghe Du
2007 Misc conf
CISS
Lin Xie, Xi Zhang
2007 J jnl
IEEE Trans. Wirel. Commun.
Jia Tang, Xi Zhang
2007 J jnl
IEEE J. Sel. Areas Commun.
Jia Tang, Xi Zhang
2007 conf
ICC
Qinghe Du, Xi Zhang
2007 B conf
GLOBECOM
Xi Zhang, Krishna Chaitanya Tadi
2007 B conf
WCNC
Hang Su, Xi Zhang
2007 J jnl
IEEE Wirel. Commun.
Hsiao-Hwa Chen, Xi Zhang, Wen Xu
2007 conf
ICC
Lin Xie, Xi Zhang
2007 Misc conf
CISS
Hang Su, Xi Zhang
2007 B ed.
IWCMC
Mohsen Guizani, Hsiao-Hwa Chen, Xi Zhang
2007 A* conf
INFOCOM
Jia Tang, Xi Zhang
2007 C conf
QSHINE
Qinghe Du, Xi Zhang
2007 J jnl
IEEE Trans. Wirel. Commun.
Jia Tang, Xi Zhang
2007 J jnl
IEEE Trans. Wirel. Commun.
Jia Tang, Xi Zhang
2007 B conf
WCNC
Xi Zhang, Hsiao-Hwa Chen, Mohsen Guizani
2007 B conf
WCNC
Lin Xie, Xi Zhang
2006 conf
ICC
Song Ci, Mohsen Guizani, Xi Zhang, Hsiao-Hwa Chen
2006 J jnl
IEEE Trans. Veh. Technol.
Xi Zhang, Qinghe Du
2006 B conf
ICCCN
Qinghe Du, Xi Zhang
2006 conf
ICC
Hang Su, Xi Zhang, Peiliang Qiu, Mohsen Guizani
2006 B conf
GLOBECOM
Hang Su, Xi Zhang, Hsiao-Hwa Chen
2006 J jnl
IEEE Wirel. Commun.
Xi Zhang, Hang Su, Hsiao-Hwa Chen
2006 C conf
WOWMOM
Qinghe Du, Xi Zhang
2006 C conf
WOWMOM
Qinghe Du, Xi Zhang
2006 J jnl
IEEE Commun. Mag.
Xi Zhang, Jia Tang, Hsiao-Hwa Chen, Song Ci, Mohsen Guizani
2006 C conf
QSHINE
Jia Tang, Xi Zhang
2006 J jnl
IEEE J. Sel. Areas Commun.
Hsiao-Hwa Chen, Yu-Ching Yeh, Xi Zhang, Aiping Huang, Yang Yang, Jie Li, Yang Xiao, Hamid Sharif, A. J. Han Vinck
2006 conf
ICC
Qinghe Du, Xi Zhang, Xuemin Shen
2006 C conf
WOWMOM
Hang Su, Xi Zhang
2006 B conf
ICCCN
Hang Su, Xi Zhang
2006 B conf
ISIT
Jia Tang, Xi Zhang
2006 Misc conf
CISS
Jia Tang, Xi Zhang
2006 J jnl
Wirel. Networks
Xi Zhang, Jia Tang
2006 conf
ICC
Jia Tang, Xi Zhang
2006 B conf
ICCCN
Lin Xie, Xi Zhang, Peiliang Qiu
2006 J jnl
IEEE J. Sel. Areas Commun.
Jia Tang, Xi Zhang
2005 C conf
QSHINE
Qinghe Du, Xi Zhang
2005 B conf
GLOBECOM
Jia Tang, Xi Zhang, Qinghe Du
2005 B conf
GLOBECOM
Xi Zhang, Debanjan Saha, Hsiao-Hwa Chen
2005 C conf
WOWMOM
Jia Tang, Xi Zhang
2005 A conf
IPDPS
Jia Tang, Xi Zhang
2005 B conf
WCNC
Jia Tang, Xi Zhang
2005 B conf
WCNC
Jia Tang, Xi Zhang
2004 J jnl
IEEE/ACM Trans. Netw.
Xi Zhang, Kang G. Shin
2004 C conf
QSHINE
Xi Zhang, Jia Tang
2004 B conf
GLOBECOM
Xi Zhang, Jia Tang
2004 B conf
WCNC
Jia Tang, Xi Zhang
2003 J jnl
IEEE/ACM Trans. Netw.
Xi Zhang, Kang G. Shin
2002 J jnl
IEEE/ACM Trans. Netw.
Xi Zhang, Kang G. Shin, Debanjan Saha, Dilip D. Kandlur
2001 B conf
ICNP
Xi Zhang, Kang G. Shin
2001 A* conf
INFOCOM
Xi Zhang, Kang G. Shin
2000 J jnl
IEEE Commun. Lett.
Kun-Wah Yip, Xi Zhang, Tung-Sang Ng, Jiangzhou Wang
1999 A* conf
INFOCOM
Xi Zhang, Kang G. Shin, Debanjan Saha, Dilip D. Kandlur
1997 A* conf
INFOCOM
Xi Zhang, Kang G. Shin, Qin Zheng
tests/unit/test_apk_dataclasses.py
← Index tests/unit/test_apk_dataclasses.py python
"""
Unit tests for APK dataclasses in redb/models/dataclasses.py.
"""
import pytest
from dataclasses import asdict, fields

pytestmark = [pytest.mark.unit, pytest.mark.dataclass, pytest.mark.apk]


# ============================================================================
# APKFeatures
# ============================================================================

class TestAPKFeaturesDataclass:
    """Tests for APKFeatures dataclass."""

    def test_named_fields(self):
        from redb.models.dataclasses import APKFeatures

        f = APKFeatures(
            package_name="com.example.app",
            app_name="Example App",
            version_code=1,
            version_name="1.0.0",
        )
        assert f.package_name == "com.example.app"
        assert f.app_name == "Example App"
        assert f.version_code == 1
        assert f.version_name == "1.0.0"

    def test_all_fields_default_none_or_safe(self):
        from redb.models.dataclasses import APKFeatures

        f = APKFeatures()
        # Nullable fields default to None
        assert f.package_name is None
        assert f.app_name is None
        assert f.version_code is None
        assert f.version_name is None
        assert f.min_sdk_version is None
        assert f.target_sdk_version is None
        assert f.compile_sdk_version is None
        assert f.main_activity is None
        # Non-nullable fields have safe defaults
        assert f.is_debuggable is False
        assert f.allow_backup is True
        assert f.uses_cleartext_traffic is False
        assert f.supported_abis == []
        assert f.dex_count == 0
        assert f.total_dex_size == 0
        assert f.total_file_count == 0
        assert f.has_native_code is False
        assert f.has_assets is False
        assert f.uses_libraries == []
        assert f.earliest_content_modification is None
        assert f.latest_content_modification is None
        assert f.contains_embedded_apk is False

    def test_all_fields_populated(self):
        from redb.models.dataclasses import APKFeatures

        f = APKFeatures(
            package_name="com.malware.test",
            app_name="Malware",
            version_code=42,
            version_name="6.6.6",
            min_sdk_version=21,
            target_sdk_version=33,
            compile_sdk_version=33,
            main_activity="com.malware.test.MainActivity",
            is_debuggable=True,
            allow_backup=False,
            uses_cleartext_traffic=True,
            supported_abis=["armeabi-v7a", "arm64-v8a", "x86"],
            dex_count=3,
            total_dex_size=5000000,
            total_file_count=200,
            has_native_code=True,
            has_assets=True,
            uses_libraries=["com.google.android.maps"],
            earliest_content_modification="2024-01-01T00:00:00Z",
            latest_content_modification="2024-06-15T12:00:00Z",
            contains_embedded_apk=True,
        )
        assert f.is_debuggable is True
        assert f.dex_count == 3
        assert len(f.supported_abis) == 3
        assert f.contains_embedded_apk is True

    def test_asdict_roundtrip(self):
        from redb.models.dataclasses import APKFeatures

        f = APKFeatures(
            package_name="com.test",
            app_name="Test",
            version_code=1,
            version_name="1.0",
        )
        d = asdict(f)
        assert d["package_name"] == "com.test"
        assert d["is_debuggable"] is False
        assert d["supported_abis"] == []

    def test_partial_extraction(self):
        """Verify that APKFeatures can be created with only some fields populated,
        simulating a partial extraction where some fields failed."""
        from redb.models.dataclasses import APKFeatures

        f = APKFeatures(
            package_name="com.example.app",
            # app_name failed to extract — left as None
            version_code=10,
            # version_name failed to extract — left as None
            is_debuggable=True,
            dex_count=2,
        )
        assert f.package_name == "com.example.app"
        assert f.app_name is None
        assert f.version_code == 10
        assert f.version_name is None
        assert f.is_debuggable is True
        assert f.dex_count == 2


# ============================================================================
# APKManifestComponent
# ============================================================================

class TestAPKManifestComponentDataclass:

    def test_creation(self):
        from redb.models.dataclasses import APKManifestComponent

        c = APKManifestComponent(
            component_type="activity",
            class_name="com.example.MainActivity",
            is_exported=True,
            intent_actions=["android.intent.action.MAIN"],
            intent_categories=["android.intent.category.LAUNCHER"],
        )
        assert c.component_type == "activity"
        assert c.class_name == "com.example.MainActivity"
        assert c.is_exported is True
        assert len(c.intent_actions) == 1
        assert len(c.intent_categories) == 1

    def test_defaults(self):
        from redb.models.dataclasses import APKManifestComponent

        c = APKManifestComponent(
            component_type="service",
            class_name="com.example.MyService",
            is_exported=False,
        )
        assert c.intent_actions == []
        assert c.intent_categories == []


# ============================================================================
# APKManifest
# ============================================================================

class TestAPKManifestDataclass:

    def test_required_fields(self):
        from redb.models.dataclasses import APKManifest

        m = APKManifest(
            activity_count=5,
            service_count=2,
            receiver_count=3,
            provider_count=1,
        )
        assert m.activity_count == 5
        assert m.service_count == 2
        assert m.receiver_count == 3
        assert m.provider_count == 1

    def test_optional_list_defaults(self):
        from redb.models.dataclasses import APKManifest

        m = APKManifest(
            activity_count=0,
            service_count=0,
            receiver_count=0,
            provider_count=0,
        )
        assert m.activities == []
        assert m.services == []
        assert m.receivers == []
        assert m.providers == []
        assert m.exported_components == []
        assert m.intent_filters_by_action == []
        assert m.intent_filters_by_category == []
        assert m.uses_features == []
        assert m.meta_data is None
        assert m.manifest_xml is None

    def test_fully_populated(self):
        from redb.models.dataclasses import APKManifest

        m = APKManifest(
            activity_count=2,
            service_count=1,
            receiver_count=1,
            provider_count=0,
            activities=["MainActivity", "SettingsActivity"],
            services=["SyncService"],
            receivers=["BootReceiver"],
            providers=[],
            exported_components=["MainActivity", "BootReceiver"],
            intent_filters_by_action=["android.intent.action.MAIN"],
            uses_features=["android.hardware.camera"],
            manifest_xml="<manifest>...</manifest>",
        )
        assert len(m.activities) == 2
        assert len(m.exported_components) == 2
        assert m.manifest_xml is not None


# ============================================================================
# APKPermission / APKPermissions
# ============================================================================

class TestAPKPermissionDataclass:

    def test_creation(self):
        from redb.models.dataclasses import APKPermission

        p = APKPermission(
            permission_name="android.permission.CAMERA",
            protection_level="dangerous",
        )
        assert p.permission_name == "android.permission.CAMERA"
        assert p.protection_level == "dangerous"
        assert p.is_custom is False

    def test_custom_permission(self):
        from redb.models.dataclasses import APKPermission

        p = APKPermission(
            permission_name="com.example.CUSTOM_PERM",
            protection_level="signature",
            is_custom=True,
        )
        assert p.is_custom is True


class TestAPKPermissionsDataclass:

    def test_required_fields(self):
        from redb.models.dataclasses import APKPermissions

        p = APKPermissions(
            total_permission_count=10,
            dangerous_permission_count=3,
        )
        assert p.total_permission_count == 10
        assert p.dangerous_permission_count == 3

    def test_defaults(self):
        from redb.models.dataclasses import APKPermissions

        p = APKPermissions(
            total_permission_count=0,
            dangerous_permission_count=0,
        )
        assert p.permissions == []
        assert p.dangerous_permissions == []
        assert p.custom_permissions == []
        assert p.permission_details == []
        assert p.permhash is None

    def test_with_permission_details(self):
        from redb.models.dataclasses import APKPermission, APKPermissions

        details = [
            APKPermission("android.permission.INTERNET", "normal"),
            APKPermission("android.permission.CAMERA", "dangerous"),
        ]
        p = APKPermissions(
            total_permission_count=2,
            dangerous_permission_count=1,
            permissions=["android.permission.INTERNET", "android.permission.CAMERA"],
            dangerous_permissions=["android.permission.CAMERA"],
            permission_details=details,
            permhash="abc123def456",
        )
        assert len(p.permission_details) == 2
        assert p.permhash == "abc123def456"


# ============================================================================
# APKCertificate / APKCodeSigningInfo
# ============================================================================

class TestAPKCertificateDataclass:

    def test_required_fields(self):
        from redb.models.dataclasses import APKCertificate

        c = APKCertificate(
            subject="CN=Android Debug",
            issuer="CN=Android Debug",
            serial_number="1234567890",
            valid_from="2024-01-01",
            valid_to="2054-01-01",
            thumbprint_sha1="aabbccdd" * 5,
            thumbprint_sha256="aabbccdd" * 8,
        )
        assert c.subject == "CN=Android Debug"
        assert c.issuer == "CN=Android Debug"
        assert c.is_self_signed is False

    def test_optional_fields(self):
        from redb.models.dataclasses import APKCertificate

        c = APKCertificate(
            subject="CN=Test",
            issuer="CN=CA",
            serial_number="1",
            valid_from="2024-01-01",
            valid_to="2025-01-01",
            thumbprint_sha1="aa" * 20,
            thumbprint_sha256="bb" * 32,
            algorithm="SHA256withRSA",
            key_size=2048,
            is_self_signed=True,
        )
        assert c.algorithm == "SHA256withRSA"
        assert c.key_size == 2048
        assert c.is_self_signed is True


class TestAPKCodeSigningInfoDataclass:

    def test_required_fields(self):
        from redb.models.dataclasses import APKCodeSigningInfo

        info = APKCodeSigningInfo(
            _id="abcdef1234567890" * 4,
            is_signed=True,
        )
        assert info.is_signed is True
        assert info.signature_scheme_versions == []
        assert info.number_of_certificates == 0
        assert info.x509_certificates is None
        assert info.apk_signer_subject is None
        assert info.apk_signer_issuer is None

    def test_fully_populated(self):
        from redb.models.dataclasses import APKCertificate, APKCodeSigningInfo

        cert = APKCertificate(
            subject="CN=Test",
            issuer="CN=Test",
            serial_number="1",
            valid_from="2024-01-01",
            valid_to="2025-01-01",
            thumbprint_sha1="aa" * 20,
            thumbprint_sha256="bb" * 32,
        )
        info = APKCodeSigningInfo(
            _id="cc" * 32,
            is_signed=True,
            signature_scheme_versions=[1, 2, 3],
            number_of_certificates=1,
            x509_certificates=[cert],
            apk_signer_subject="CN=Test",
            apk_signer_issuer="CN=Test",
        )
        assert len(info.signature_scheme_versions) == 3
        assert info.number_of_certificates == 1
        assert len(info.x509_certificates) == 1


# ============================================================================
# APKDexFile
# ============================================================================

class TestAPKDexFileDataclass:

    def test_required_fields(self):
        from redb.models.dataclasses import APKDexFile

        d = APKDexFile(
            filename="classes.dex",
            sha256="aa" * 32,
            class_count=100,
            method_count=500,
            string_count=1000,
        )
        assert d.filename == "classes.dex"
        assert d.class_count == 100
        assert d.method_count == 500
        assert d.string_count == 1000

    def test_optional_fields_defaults(self):
        from redb.models.dataclasses import APKDexFile

        d = APKDexFile(
            filename="classes2.dex",
            sha256="bb" * 32,
            class_count=0,
            method_count=0,
            string_count=0,
        )
        assert d.tlsh is None
        assert d.top_packages is None
        assert d.api_usage is None
        assert d.obfuscation_indicators is None

    def test_tlsh_populated(self):
        from redb.models.dataclasses import APKDexFile

        tlsh_value = "T1" + "A" * 68
        d = APKDexFile(
            filename="classes.dex",
            sha256="aa" * 32,
            class_count=100,
            method_count=500,
            string_count=1000,
            tlsh=tlsh_value,
        )
        assert d.tlsh == tlsh_value

    def test_with_api_usage(self):
        from redb.models.dataclasses import APKDexFile

        d = APKDexFile(
            filename="classes.dex",
            sha256="cc" * 32,
            class_count=50,
            method_count=200,
            string_count=300,
            top_packages=[{"name": "com.example", "class_count": 30}],
            api_usage={
                "crypto": ["Ljavax/crypto/Cipher;->getInstance"],
                "reflection": ["Ljava/lang/Class;->forName"],
            },
            obfuscation_indicators={"short_class_names_ratio": 0.8, "single_char_methods_ratio": 0.5},
        )
        assert len(d.api_usage) == 2
        assert d.obfuscation_indicators["short_class_names_ratio"] == 0.8


# ============================================================================
# APKResource
# ============================================================================

class TestAPKResourceDataclass:

    def test_creation(self):
        from redb.models.dataclasses import APKResource

        r = APKResource(
            path="res/drawable/icon.png",
            size=1024,
            sha256="dd" * 32,
            filetype_magika="png",
        )
        assert r.path == "res/drawable/icon.png"
        assert r.size == 1024
        assert r.is_suspicious is False

    def test_suspicious_resource(self):
        from redb.models.dataclasses import APKResource

        r = APKResource(
            path="assets/payload.dex",
            size=50000,
            sha256="ee" * 32,
            filetype_magika="dex",
            is_suspicious=True,
        )
        assert r.is_suspicious is True


# ============================================================================
# APKNativeLib
# ============================================================================

class TestAPKNativeLibDataclass:

    def test_creation(self):
        from redb.models.dataclasses import APKNativeLib

        lib = APKNativeLib(
            abi="arm64-v8a",
            filename="libnative.so",
            size=200000,
            sha256="ff" * 32,
        )
        assert lib.abi == "arm64-v8a"
        assert lib.filename == "libnative.so"
        assert lib.is_known_packer is False

    def test_known_packer(self):
        from redb.models.dataclasses import APKNativeLib

        lib = APKNativeLib(
            abi="armeabi-v7a",
            filename="libjiagu.so",
            size=100000,
            sha256="aa" * 32,
            is_known_packer=True,
        )
        assert lib.is_known_packer is True


# ============================================================================
# APKInconsistencyTests
# ============================================================================

class TestAPKInconsistencyTestsDataclass:

    def test_all_defaults_none(self):
        from redb.models.dataclasses import APKInconsistencyTests

        t = APKInconsistencyTests()
        assert t.test_zip_bomb is None
        assert t.test_zip_duplicate_entries is None
        assert t.test_zip_path_traversal is None
        assert t.test_zip_suspicious_timestamps is None
        assert t.test_hidden_dex_files is None
        assert t.test_manifest_component_mismatch is None
        assert t.test_debuggable_release is None
        assert t.test_emulator_detection_strings is None
        assert t.test_debugger_detection is None
        assert t.test_root_detection is None

    def test_all_fields_populated(self):
        from redb.models.dataclasses import APKInconsistencyTests

        t = APKInconsistencyTests(
            test_zip_bomb=True,
            test_zip_duplicate_entries=False,
            test_zip_path_traversal=True,
            test_zip_suspicious_timestamps=False,
            test_hidden_dex_files=True,
            test_manifest_component_mismatch=False,
            test_debuggable_release=True,
            test_emulator_detection_strings=True,
            test_debugger_detection=False,
            test_root_detection=True,
        )
        assert t.test_zip_bomb is True
        assert t.test_debuggable_release is True
        # Count true values
        d = asdict(t)
        true_count = sum(1 for v in d.values() if v is True)
        assert true_count == 6

    def test_field_count(self):
        from redb.models.dataclasses import APKInconsistencyTests

        # Exactly 10 inconsistency tests per PDD specification
        assert len(fields(APKInconsistencyTests)) == 10


# ============================================================================
# Hashes dataclass — APK permhash field
# ============================================================================

class TestHashesAPKField:

    def test_permhash_default_none(self):
        from redb.models.dataclasses import Hashes

        h = Hashes(md5="a", sha1="b", sha256="c", ssdeep_hash="d", tlsh_hash="e")
        assert h.permhash is None

    def test_permhash_populated(self):
        from redb.models.dataclasses import Hashes

        h = Hashes(
            md5="a", sha1="b", sha256="c", ssdeep_hash="d", tlsh_hash="e",
            permhash="abc123" * 10 + "abcd",
        )
        assert h.permhash is not None
        assert len(h.permhash) == 64


# ============================================================================
# Tag enum — APK entries
# ============================================================================

class TestAPKTagEnum:

    def test_all_apk_tags_exist(self):
        from redb.extractors.enum import Tag

        expected_tags = [
            "APK_FEATURES", "APK_MANIFEST", "APK_PERMISSIONS", "APK_SIGNATURE",
            "APK_DEX", "APK_RESOURCES", "APK_NATIVE_LIBS", "APK_INCONSISTENCY_TESTS",
        ]
        for name in expected_tags:
            assert hasattr(Tag, name), f"Tag.{name} missing"

    def test_apk_tag_values(self):
        from redb.extractors.enum import Tag

        assert Tag.APK_FEATURES.value == "apk_features"
        assert Tag.APK_MANIFEST.value == "apk_manifest"
        assert Tag.APK_PERMISSIONS.value == "apk_permissions"
        assert Tag.APK_SIGNATURE.value == "apk_signature"
        assert Tag.APK_DEX.value == "apk_dex"
        assert Tag.APK_RESOURCES.value == "apk_resources"
        assert Tag.APK_NATIVE_LIBS.value == "apk_native_libs"
        assert Tag.APK_INCONSISTENCY_TESTS.value == "apk_inconsistency_tests"