• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "audio_socket_thread_test.h"
17 #include <thread>
18 #include <string>
19 #include <memory>
20 #include <vector>
21 #include <sys/socket.h>
22 #include <cerrno>
23 #include <fstream>
24 #include <algorithm>
25 #include <unistd.h>
26 #include "audio_policy_log.h"
27 #include "audio_errors.h"
28 #include "audio_pnp_server.h"
29 using namespace std;
30 using namespace std::chrono;
31 using namespace testing::ext;
32 
33 namespace OHOS {
34 namespace AudioStandard {
35 namespace {
36     const int32_t HDF_ERR_INVALID_PARAM = -3;
37 } // namespace
38 
SetUpTestCase(void)39 void AudioSocketThreadUnitTest::SetUpTestCase(void) {}
TearDownTestCase(void)40 void AudioSocketThreadUnitTest::TearDownTestCase(void) {}
SetUp(void)41 void AudioSocketThreadUnitTest::SetUp(void) {}
TearDown(void)42 void AudioSocketThreadUnitTest::TearDown(void) {}
43 
44 
45 #define PRINT_LINE printf("debug __LINE__:%d\n", __LINE__)
46 
47 /**
48 * @tc.name  : Test AudioSocketThread.
49 * @tc.number: AudioSocketThread_001
50 * @tc.desc  : Test IsUpdatePnpDeviceState.
51 */
52 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_001, TestSize.Level1)
53 {
54     AudioEvent event1;
55     event1.eventType = 1;
56     event1.deviceType = 2;
57     event1.name = "Device1";
58     event1.address = "Address1";
59     event1.anahsName = "AnahsName1";
60 
61     audioSocketThread_.UpdatePnpDeviceState(&event1);
62 
63     //Test the exact same event
64     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event1), false);
65 
66     //Test events with different eventtypes
67     AudioEvent event2;
68     event2.eventType = 2;  // change eventType
69     event2.deviceType = 2;
70     event2.name = "Device1";
71     event2.address = "Address1";
72     event2.anahsName = "AnahsName1";
73     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event2), true);
74 
75     //Test for events with different deviceTypes
76     AudioEvent event3;
77     event3.eventType = 1;
78     event3.deviceType = 1;
79     event3.name = "Device1";
80     event3.address = "Address1";
81     event3.anahsName = "AnahsName1";
82     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event3), true);
83 
84     //Test events with different names
85     AudioEvent event4;
86     event4.eventType = 1;
87     event4.deviceType = 1;
88     event4.name = "Device2";
89     event4.address = "Address1";
90     event4.anahsName = "AnahsName1";
91     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event4), true);
92 
93     // Test events with different addresses
94     AudioEvent event5;
95     event5.eventType = 1;
96     event5.deviceType = 1;
97     event5.name = "Device1";
98     event5.address = "Address2";
99     event5.anahsName = "AnahsName1";
100     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event5), true);
101 
102     //Test the anahsName for different events
103     AudioEvent event6;
104     event6.eventType = 1;
105     event6.deviceType = 1;
106     event6.name = "Device1";
107     event6.address = "Address1";
108     event6.anahsName = "AnahsName2";
109 
110     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event6), true);
111 }
112 
113 /**
114 * @tc.name  : Test AudioSocketThread.
115 * @tc.number: AudioSocketThread_002
116 * @tc.desc  : Test IsUpdatePnpDeviceState.
117 */
118 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_002, TestSize.Level1)
119 {
120     AudioEvent event1;
121     event1.eventType = 1;
122     event1.deviceType = 1;
123     event1.name = "Device1";
124     event1.address = "Address1";
125     event1.anahsName = "AnahsName1";
126 
127     //Set the start state
128     audioSocketThread_.UpdatePnpDeviceState(&event1);
129 
130     //Test completely different events
131     AudioEvent event2;
132     event2.eventType = 2;
133     event2.deviceType = 2;
134     event2.name = "Device2";
135     event2.address = "Address2";
136     event2.anahsName = "AnahsName2";
137     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event2), true);
138 
139     //Test events where both eventType and eventType are different
140     AudioEvent event3;
141     event3.eventType = 2;
142     event3.deviceType = 2;
143     event3.name = "Device1";
144     event3.address = "Address1";
145     event3.anahsName = "AnahsName1";
146     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event3), true);
147 
148     //Test for events where deviceType and name are different
149     AudioEvent event4;
150     event4.eventType = 1;
151     event4.deviceType = 2;
152     event4.name = "Device2";
153     event4.address = "Address1";
154     event4.anahsName = "AnahsName1";
155     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event4), true);
156 
157     //Test for events where both name and adress are different
158     AudioEvent event5;
159     event5.eventType = 1;
160     event5.deviceType = 1;
161     event5.name = "Device2";
162     event5.address = "Address2";
163     event5.anahsName = "AnahsName1";
164     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event5), true);
165 
166     //Test for events where both adress and anahsName are different
167     AudioEvent event6;
168     event6.eventType = 1;
169     event6.deviceType = 1;
170     event6.name = "Device1";
171     event6.address = "Address2";
172     event6.anahsName = "AnahsName2";
173     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event6), true);
174 }
175 
176 /**
177 * @tc.name  : Test AudioSocketThread.
178 * @tc.number: AudioSocketThread_003
179 * @tc.desc  : Test IsUpdatePnpDeviceState.
180 */
181 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_003, TestSize.Level1)
182 {
183     AudioEvent event1;
184     event1.eventType = 1;
185     event1.deviceType = 1;
186     event1.name = "Device1";
187     event1.address = "Address1";
188     event1.anahsName = "AnahsName1";
189 
190     audioSocketThread_.UpdatePnpDeviceState(&event1);
191 
192     //Test events with different eventType, eventType, and name
193     AudioEvent event2;
194     event2.eventType = 2;
195     event2.eventType = 2;
196     event2.name = "Device2";
197     event2.address = "Address1";
198     event2.anahsName = "AnahsName1";
199     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event2), true);
200 
201     //Test events with different eventType, name, and address
202     AudioEvent event3;
203     event3.eventType = 2;
204     event3.eventType = 2;
205     event3.name = "Device2";
206     event3.address = "Address1";
207     event3.anahsName = "AnahsName1";
208     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event3), true);
209 
210     //Test for events where name, address, and anahsName are different
211     AudioEvent event4;
212     event4.eventType = 2;
213     event4.eventType = 2;
214     event4.name = "Device2";
215     event4.address = "Address1";
216     event4.anahsName = "AnahsName1";
217     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event4), true);
218 
219     // Test foraddress,anahsName and eventType are different
220     AudioEvent event5;
221     event5.eventType = 2;
222     event5.eventType = 1;
223     event5.name = "Device1";
224     event5.address = "Address2";
225     event5.anahsName = "AnahsName2";
226     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event5), true);
227 
228     //Test for events where address, anahsName, and eventType are different
229     AudioEvent event6;
230     event6.eventType = 2;
231     event6.eventType = 2;
232     event6.name = "Device1";
233     event6.address = "Address1";
234     event6.anahsName = "AnahsName2";
235     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event6), true);
236 }
237 
238 /**
239 * @tc.name  : Test AudioSocketThread.
240 * @tc.number: AudioSocketThread_004
241 * @tc.desc  : Test IsUpdatePnpDeviceState.
242 */
243 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_004, TestSize.Level1)
244 {
245     AudioEvent event1;
246     event1.eventType = 1;
247     event1.deviceType = 1;
248     event1.name = "Device1";
249     event1.address = "Address1";
250     event1.anahsName = "AnahsName1";
251 
252     audioSocketThread_.UpdatePnpDeviceState(&event1);
253 
254     //Test events that are different for eventType, eventType, name, and adress
255     AudioEvent event2;
256     event2.eventType = 2;
257     event2.deviceType = 2;
258     event2.name = "Device2";
259     event2.address = "Address2";
260     event2.anahsName = "AnahsName1";
261     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event2), true);
262 
263     //Test events where eventType, name, adress, and anahsName are all different
264     AudioEvent event3;
265     event3.eventType = 1;
266     event3.deviceType = 2;
267     event3.name = "Device2";
268     event3.address = "Address2";
269     event3.anahsName = "AnahsName2";
270     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event3), true);
271 
272     //Test for events where name, adress, anahsName, and eventType are all different
273     AudioEvent event4;
274     event4.eventType = 2;
275     event4.deviceType = 1;
276     event4.name = "Device2";
277     event4.address = "Address2";
278     event4.anahsName = "AnahsName2";
279     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event4), true);
280 
281     //Test for events where adress, anahsName, eventType, and deviceType are all different
282     AudioEvent event5;
283     event5.eventType = 2;
284     event5.deviceType = 2;
285     event5.name = "Device1";
286     event5.address = "Address2";
287     event5.anahsName = "AnahsName2";
288     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event5), true);
289 
290     //Test for events where anahsName, eventType, deviceType, and name are all different
291     AudioEvent event6;
292     event6.eventType = 2;
293     event6.deviceType = 2;
294     event6.name = "Device2";
295     event6.address = "Address1";
296     event6.anahsName = "AnahsName2";
297     EXPECT_EQ(audioSocketThread_.IsUpdatePnpDeviceState(&event6), true);
298 }
299 
300 /**
301 * @tc.name  : Test AudioSocketThread.
302 * @tc.number: AudioSocketThread_005
303 * @tc.desc  : Test SetAudioPnpUevent REMOVE_AUDIO_DEVICE
304 */
305 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_005, TestSize.Level1)
306 {
307     AudioPnpUevent uevent = {
308         .action = "remove",
309         .name = "TestDevice",
310         .state = "removed",
311         .devType = "headset",
312         .subSystem = "audio",
313         .switchName = "h2w",
314         .switchState = "0",
315         .hidName = "hid",
316         .devName = "TestDevName",
317         .anahsName = "anahs"
318     };
319 
320     AudioEvent event;
321     int32_t result = AudioSocketThread::SetAudioPnpServerEventValue(&event, &uevent);
322     EXPECT_NE(result, SUCCESS);
323     EXPECT_NE(event.eventType, PNP_EVENT_DEVICE_REMOVE);
324     EXPECT_NE(event.deviceType, PNP_DEVICE_HEADSET);
325     EXPECT_NE(event.name, "TestDevice");
326     EXPECT_NE(event.address, "TestDevName");
327 }
328 
329 /**
330 * @tc.name  : Test AudioSocketThread.
331 * @tc.number: AudioSocketThread_006
332 * @tc.desc  : Test SetAudioPnpUevent ADD_DEVICE_HEADSET
333 */
334 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_006, TestSize.Level1)
335 {
336     AudioPnpUevent uevent = {
337         .action = "add",
338         .name = "TestDevice",
339         .state = "added",
340         .devType = "headset",
341         .subSystem = "switch",
342         .switchName = "h2w",
343         .switchState = "1",
344         .hidName = "hid",
345         .devName = "TestDevName",
346         .anahsName = "anahs"
347     };
348 
349     AudioEvent event;
350     int32_t result = AudioSocketThread::SetAudioPnpServerEventValue(&event, &uevent);
351     EXPECT_EQ(result, SUCCESS);
352     EXPECT_EQ(event.eventType, PNP_EVENT_DEVICE_ADD);
353     EXPECT_EQ(event.deviceType, PNP_DEVICE_HEADSET);
354     EXPECT_EQ(event.name, "TestDevice");
355     EXPECT_EQ(event.address, "TestDevName");
356 }
357 
358 /**
359 * @tc.name  : Test AudioSocketThread.
360 * @tc.number: AudioSocketThread_007
361 * @tc.desc  : Test SetAudioPnpUevent ADD_DEVICE_HEADSET_WITHOUT_MIC
362 */
363 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_007, TestSize.Level1)
364 {
365     AudioPnpUevent uevent = {
366         .action = "add",
367         .name = "TestDevice",
368         .state = "added",
369         .devType = "headset_without_mic",
370         .subSystem = "switch",
371         .switchName = "h2w",
372         .switchState = "2",
373         .hidName = "hid",
374         .devName = "TestDevName",
375         .anahsName = "anahs"
376     };
377 
378     AudioEvent event;
379     int32_t result = AudioSocketThread::SetAudioPnpServerEventValue(&event, &uevent);
380 
381     EXPECT_EQ(result, SUCCESS);
382     EXPECT_EQ(event.eventType, PNP_EVENT_DEVICE_ADD);
383     EXPECT_EQ(event.deviceType, PNP_DEVICE_HEADSET);
384     EXPECT_EQ(event.name, "TestDevice");
385     EXPECT_EQ(event.address, "TestDevName");
386 }
387 
388 /**
389 * @tc.name  : Test AudioSocketThread.
390 * @tc.number: AudioSocketThread_008
391 * @tc.desc  : Test SetAudioPnpUevent_ADD_DEVICE_ADAPTER
392 */
393 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_008, TestSize.Level1)
394 {
395     AudioPnpUevent uevent = {
396         .action = "add",
397         .name = "TestDevice",
398         .state = "added",
399         .devType = "adapter",
400         .subSystem = "switch",
401         .switchName = "h2w",
402         .switchState = "4",
403         .hidName = "hid",
404         .devName = "TestDevName",
405         .anahsName = "anahs"
406     };
407 
408     AudioEvent event;
409     int32_t result = AudioSocketThread::SetAudioPnpServerEventValue(&event, &uevent);
410 
411     EXPECT_EQ(result, SUCCESS);
412     EXPECT_EQ(event.eventType, PNP_EVENT_DEVICE_ADD);
413     EXPECT_EQ(event.deviceType, PNP_DEVICE_ADAPTER_DEVICE);
414     EXPECT_EQ(event.name, "TestDevice");
415     EXPECT_EQ(event.address, "TestDevName");
416 }
417 
418 /**
419 * @tc.name  : Test AudioSocketThread.
420 * @tc.number: AudioSocketThread_009
421 * @tc.desc  : Test SetAudioPnpUevent_ADD_DEVICE_MIC_BLOCKED
422 */
423 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_009, TestSize.Level1)
424 {
425     AudioPnpUevent uevent = {
426         .action = "block",
427         .name = "TestDevice",
428         .state = "blocked",
429         .devType = "mic",
430         .subSystem = "switch",
431         .switchName = "h2w",
432         .switchState = "5",
433         .hidName = "hid",
434         .devName = "TestDevName",
435         .anahsName = "anahs"
436     };
437 
438     AudioEvent event;
439     int32_t result = AudioSocketThread::SetAudioPnpServerEventValue(&event, &uevent);
440 
441     EXPECT_EQ(result, SUCCESS);
442     EXPECT_EQ(event.eventType, PNP_EVENT_DEVICE_ADD);
443     EXPECT_EQ(event.deviceType, PNP_DEVICE_UNKNOWN);
444     EXPECT_EQ(event.name, "TestDevice");
445     EXPECT_EQ(event.address, "TestDevName");
446 }
447 
448 /**
449 * @tc.name  : Test AudioSocketThread.
450 * @tc.number: AudioSocketThread_010
451 * @tc.desc  : Test SetAudioPnpUevent_ADD_DEVICE_MIC_UN_BLOCKED
452 */
453 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_010, TestSize.Level1)
454 {
455     AudioPnpUevent uevent = {
456         .action = "unblock",
457         .name = "TestDevice",
458         .state = "unblocked",
459         .devType = "mic",
460         .subSystem = "switch",
461         .switchName = "h2w",
462         .switchState = "6",
463         .hidName = "hid",
464         .devName = "TestDevName",
465         .anahsName = "anahs"
466     };
467 
468     AudioEvent event;
469     int32_t result = AudioSocketThread::SetAudioPnpServerEventValue(&event, &uevent);
470 
471     EXPECT_EQ(result, SUCCESS);
472     EXPECT_EQ(event.eventType, PNP_EVENT_DEVICE_ADD);
473     EXPECT_EQ(event.deviceType, PNP_DEVICE_UNKNOWN);
474     EXPECT_EQ(event.name, "TestDevice");
475     EXPECT_EQ(event.address, "TestDevName");
476 }
477 
478 /**
479 * @tc.name  : Test AudioSocketThread.
480 * @tc.number: AudioSocketThread_011
481 * @tc.desc  : Test SetAudioPnpUevent_UnknownState
482 */
483 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_011, TestSize.Level1)
484 {
485     AudioPnpUevent uevent = {
486         .action = "unknown",
487         .name = "TestDevice",
488         .state = "unknown",
489         .devType = "unknown",
490         .subSystem = "switch",
491         .switchName = "h2w",
492         .switchState = "X", // 'X' UnknownState
493         .hidName = "hid",
494         .devName = "TestDevName",
495         .anahsName = "anahs"
496     };
497 
498     AudioEvent event;
499     int32_t result = AudioSocketThread::SetAudioPnpServerEventValue(&event, &uevent);
500 
501     EXPECT_EQ(result, SUCCESS);
502     EXPECT_EQ(event.eventType, PNP_EVENT_DEVICE_ADD);
503     EXPECT_EQ(event.deviceType, PNP_DEVICE_UNKNOWN);
504     EXPECT_EQ(event.name, "TestDevice");
505     EXPECT_EQ(event.address, "TestDevName");
506 }
507 
508 /**
509 * @tc.name  : Test AudioSocketThread.
510 * @tc.number: AudioSocketThread_012
511 * @tc.desc  : Test SetAudioPnpUevent_NonSwitchSubsystem
512 */
513 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_012, TestSize.Level1)
514 {
515     AudioPnpUevent uevent = {
516         .action = "change",
517         .name = "headset",
518         .state = "analog_hs0",
519         .devType = "extcon",
520         .subSystem = "other",
521         .switchName = "h2w",
522         .switchState = "0",
523         .hidName = "hid",
524         .devName = "TestDevName",
525         .anahsName = "anahs"
526     };
527 
528     AudioEvent event;
529     int32_t result = AudioSocketThread::SetAudioPnpServerEventValue(&event, &uevent);
530     EXPECT_EQ(result, ERROR);
531 }
532 
533 /**
534 * @tc.name  : Test AudioSocketThread.
535 * @tc.number: AudioSocketThread_013
536 * @tc.desc  : Test SetAudioPnpUevent_InvalidSwitchName
537 */
538 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_013, TestSize.Level1)
539 {
540     AudioPnpUevent uevent = {
541         .action = "remove",
542         .name = "TestDevice",
543         .state = "removed",
544         .devType = "headset",
545         .subSystem = "switch",
546         .switchName = "invalid",
547         .switchState = "0",
548         .hidName = "hid",
549         .devName = "TestDevName",
550         .anahsName = "anahs"
551     };
552 
553     AudioEvent event;
554     int32_t result = AudioSocketThread::SetAudioPnpServerEventValue(&event, &uevent);
555     EXPECT_EQ(result, ERROR);
556     }
557 
558 /**
559 * @tc.name  : Test AudioSocketThread.
560 * @tc.number: AudioSocketThread_014
561 * @tc.desc  : Test SetAudioPnpUevent_InvalidAction
562 */
563 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_014, TestSize.Level1)
564 {
565     AudioPnpUevent uevent = {
566         .action = "invalid",
567         .name = "headset",
568         .state = "analog_hs0",
569         .devType = "extcon",
570         .subSystem = "other",
571         .switchName = "h2w",
572         .switchState = "0",
573         .hidName = "hid",
574         .devName = "TestDevName",
575         .anahsName = "anahs"
576     };
577 
578     AudioEvent event;
579     int32_t result = AudioSocketThread::SetAudioPnpServerEventValue(&event, &uevent);
580     EXPECT_EQ(result, ERROR);
581 }
582 
583 /**
584 * @tc.name  : Test AudioSocketThread.
585 * @tc.number: AudioSocketThread_015
586 * @tc.desc  : Test SetAudioPnpUevent_InvalidDevType
587 */
588 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_015, TestSize.Level1)
589 {
590     AudioPnpUevent uevent = {
591         .action = "change",
592         .name = "headset",
593         .state = "analog_hs0",
594         .devType = "invalid",
595         .subSystem = "other",
596         .switchName = "h2w",
597         .switchState = "0",
598         .hidName = "hid",
599         .devName = "TestDevName",
600         .anahsName = "anahs"
601     };
602     AudioEvent event;
603     int32_t result = AudioSocketThread::SetAudioPnpServerEventValue(&event, &uevent);
604     EXPECT_EQ(result, ERROR);
605 }
606 
607 /**
608 * @tc.name  : Test AudioSocketThread.
609 * @tc.number: AudioSocketThread_016
610 * @tc.desc  : Test SetAudioPnpUevent_InvalidState
611 */
612 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_016, TestSize.Level1)
613 {
614     AudioPnpUevent uevent = {
615         .action = "change",
616         .name = "headset",
617         .state = "invalid",
618         .devType = "extcon",
619         .subSystem = "other",
620         .switchName = "h2w",
621         .switchState = "0",
622         .hidName = "hid",
623         .devName = "TestDevName",
624         .anahsName = "anahs"
625     };
626     AudioEvent event;
627     int32_t result = AudioSocketThread::SetAudioPnpServerEventValue(&event, &uevent);
628     EXPECT_EQ(result, ERROR);
629 }
630 
631 /**
632  * @tc.name : Test AudioSocketThread.
633  * @tc.number: AudioSocketThread_029
634  * @tc.desc : Test AudioDpDetectDevice
635  */
636 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_029, TestSize.Level1)
637 {
638     AudioSocketThread audioSocketThread;
639     // Test case 1: Invalid parameter (NULL audioPnpUevent)
640     {
641         int32_t result = audioSocketThread.AudioDpDetectDevice(nullptr);
642         EXPECT_EQ(result, HDF_ERR_INVALID_PARAM);
643     }
644     // Test case 2: Invalid subSystem
645     {
646         AudioPnpUevent uevent = {
647             .subSystem = "invalid",
648             .switchName = "hdmi_audio",
649             .action = "change",
650             .switchState = "1"
651         };
652         int32_t result = audioSocketThread.AudioDpDetectDevice(&uevent);
653         EXPECT_EQ(result, HDF_ERR_INVALID_PARAM);
654     }
655     // Test case 3: Invalid switchName
656     {
657         AudioPnpUevent uevent = {
658             .subSystem = "switch",
659             .switchName = "invalid",
660             .action = "change",
661             .switchState = "1"
662         };
663         int32_t result = audioSocketThread.AudioDpDetectDevice(&uevent);
664         EXPECT_EQ(result, HDF_ERR_INVALID_PARAM);
665     }
666 }
667 
668 /**
669  * @tc.name : Test AudioSocketThread.
670  * @tc.number: AudioSocketThread_030
671  * @tc.desc : Test AudioDpDetectDevice
672  */
673  HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_030, TestSize.Level1)
674 {
675     AudioSocketThread audioSocketThread;
676     // Test case 4: Invalid action
677     {
678         AudioPnpUevent uevent = {
679             .subSystem = "switch",
680             .switchName = "hdmi_audio",
681             .action = "invalid",
682             .switchState = "1"
683         };
684         int32_t result = audioSocketThread.AudioDpDetectDevice(&uevent);
685         EXPECT_EQ(result, HDF_ERR_INVALID_PARAM);
686     }
687     // Test case 5: Device Add Event
688     {
689         AudioPnpUevent uevent = {
690             .subSystem = "switch",
691             .switchName = "hdmi_audio1device_port=1",
692             .action = "change",
693             .switchState = "1"
694         };
695         int32_t result = audioSocketThread.AudioDpDetectDevice(&uevent);
696         EXPECT_EQ(result, SUCCESS);
697         // Additional checks can be added here to verify the internal state
698     }
699     // Test case 6: Device Remove Event
700     {
701         AudioPnpUevent uevent = {
702             .subSystem = "switch",
703             .switchName = "hdmi_audio1device_port=1",
704             .action = "change",
705             .switchState = "0"
706         };
707         int32_t result = audioSocketThread.AudioDpDetectDevice(&uevent);
708         EXPECT_EQ(result, SUCCESS);
709         // Additional checks can be added here to verify the internal state
710     }
711 }
712 
713 /**
714  * @tc.name : Test AudioSocketThread.
715  * @tc.number: AudioSocketThread_031
716  * @tc.desc : Test AudioDpDetectDevice
717  */
718  HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_031, TestSize.Level1)
719 {
720     AudioSocketThread audioSocketThread;
721     // Test case 7: Invalid switchState
722     {
723         AudioPnpUevent uevent = {
724             .subSystem = "switch",
725             .switchName = "hdmi_audio1device_port=1",
726             .action = "change",
727             .switchState = "invalid"
728         };
729         int32_t result = audioSocketThread.AudioDpDetectDevice(&uevent);
730         EXPECT_EQ(result, ERROR);
731     }
732     // Test case 8: No device_port in switchName
733     {
734         AudioPnpUevent uevent = {
735             .subSystem = "switch",
736             .switchName = "hdmi_audio1",
737             .action = "change",
738             .switchState = "1"
739         };
740         int32_t result = audioSocketThread.AudioDpDetectDevice(&uevent);
741         EXPECT_EQ(result, SUCCESS);
742     }
743 }
744 
745 /**
746  * @tc.name : Test AudioSocketThread.
747  * @tc.number: AudioSocketThread_033
748  * @tc.desc : Test UpdateDeviceState
749  */
750 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_033, TestSize.Level1)
751 {
752     AudioSocketThread audioSocketThread;
753     //Test: No update required
754     AudioEvent noUpdateEvent = {1, 1, "device", "address", "anahs"};
755     AudioEvent audioSocketEvent_ = noUpdateEvent;
756     audioSocketThread.UpdateDeviceState(noUpdateEvent);
757     //Test: Successful update
758     AudioEvent successUpdateEvent = {1, 2, "device", "address", "anahs"};
759     audioSocketThread.UpdateDeviceState(successUpdateEvent);
760     //Test:snprintf_s failed
761     AudioEvent snprintfFailEvent = {1, 2, "device", "address", "anahs"};
762     audioSocketThread.UpdateDeviceState(snprintfFailEvent);
763     AudioEvent snprintfSuccessEvent = {1, 2, "device", "address", "anahs"};
764     audioSocketThread.UpdateDeviceState(snprintfSuccessEvent);
765 }
766 
767 /**
768  * @tc.name : Test AudioSocketThread.
769  * @tc.number: AudioSocketThread_034
770  * @tc.desc : Test AudioAnalogHeadsetDetectDevice
771  */
772 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_034, TestSize.Level1)
773 {
774     AudioSocketThread audioSocketThread;
775     AudioPnpUevent audioPnpUevent = {
776         .action = "change",
777         .name = "headset",
778         .state = "analog_hs1",
779         .devType = "extcon",
780         .subSystem = "switch",
781         .switchName = "h2w",
782         .switchState = "on",
783         .hidName = "hid_name",
784         .devName = "test_dev_name",
785         .anahsName = "anahs_name"
786     };
787     EXPECT_EQ(audioSocketThread.AudioAnalogHeadsetDetectDevice(&audioPnpUevent), SUCCESS);
788 }
789 
790 /**
791  * @tc.name : Test AudioSocketThread.
792  * @tc.number: AudioSocketThread_035
793  * @tc.desc : Test SetAudioPnpServerEventValue
794  */
795 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_035, TestSize.Level1)
796 {
797     AudioSocketThread audioSocketThread;
798     AudioPnpUevent audioPnpUevent = {
799         .action = "change",
800         .name = "headset",
801         .state = "analog_hs1",
802         .devType = "extcon",
803         .subSystem = "switch",
804         .switchName = "h2w",
805         .switchState = "on",
806         .hidName = "hid_name",
807         .devName = "dev_name",
808         .anahsName = "anahs_name"
809     };
810     AudioEvent audioEvent;
811 
812     EXPECT_EQ(audioSocketThread.SetAudioPnpServerEventValue(&audioEvent, &audioPnpUevent), SUCCESS);
813     EXPECT_EQ(audioEvent.eventType, PNP_EVENT_DEVICE_ADD);
814     EXPECT_NE(audioEvent.deviceType, PNP_DEVICE_HEADSET);
815     EXPECT_EQ(audioEvent.name, "headset");
816     EXPECT_EQ(audioEvent.address, "dev_name");
817 }
818 
819 /**
820  * @tc.name : Test AudioSocketThread.
821  * @tc.number: AudioSocketThread_036
822  * @tc.desc : Test SetAudioPnpServerEventValue
823  */
824 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_036, TestSize.Level1)
825 {
826     AudioSocketThread audioSocketThread;
827     AudioPnpUevent audioPnpUevent = {
828         .action = "change",
829         .name = "headset",
830         .state = "analog_hs0",
831         .devType = "extcon",
832         .subSystem = "not_switch",
833         .switchName = "h2w",
834         .switchState = "on",
835         .hidName = "hid_name",
836         .devName = "dev_name",
837         .anahsName = "anahs_name"
838     };
839     AudioEvent audioEvent;
840 
841     EXPECT_NE(audioSocketThread.SetAudioPnpServerEventValue(&audioEvent, &audioPnpUevent), SUCCESS);
842     EXPECT_NE(audioEvent.eventType, PNP_EVENT_DEVICE_REMOVE);
843     EXPECT_NE(audioEvent.deviceType, PNP_DEVICE_HEADSET);
844 }
845 
846 /**
847  * @tc.name : Test AudioSocketThread.
848  * @tc.number: AudioSocketThread_037
849  * @tc.desc : Test AudioAnahsDetectDevice
850  */
851 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_037, TestSize.Level1)
852 {
853     AudioSocketThread audioSocketThread;
854     // Test case 1: NULL input
855     EXPECT_EQ(HDF_ERR_INVALID_PARAM, audioSocketThread.AudioAnahsDetectDevice(nullptr));
856 
857     // Test case 2: Valid input with UEVENT_INSERT
858     struct AudioPnpUevent validUeventInsert = {
859         .subSystem = UEVENT_PLATFORM,
860         .anahsName = UEVENT_INSERT
861     };
862     EXPECT_EQ(SUCCESS, audioSocketThread.AudioAnahsDetectDevice(&validUeventInsert));
863     EXPECT_STREQ(UEVENT_INSERT, AudioSocketThread::audioSocketEvent_.anahsName.c_str());
864 
865     // Test case 3: Valid input with UEVENT_REMOVE
866     struct AudioPnpUevent validUeventRemove = {
867         .subSystem = UEVENT_PLATFORM,
868         .anahsName = UEVENT_REMOVE
869     };
870     EXPECT_EQ(SUCCESS, audioSocketThread.AudioAnahsDetectDevice(&validUeventRemove));
871     EXPECT_STREQ(UEVENT_REMOVE, AudioSocketThread::audioSocketEvent_.anahsName.c_str());
872 
873     // Test case 4: Invalid subsystem
874     struct AudioPnpUevent invalidSubsystem = {
875         .subSystem = "invalid",
876         .anahsName = UEVENT_INSERT
877     };
878     EXPECT_EQ(ERROR, audioSocketThread.AudioAnahsDetectDevice(&invalidSubsystem));
879 
880     // Test case 5: Invalid anahsName
881     struct AudioPnpUevent invalidAnahsName = {
882         .subSystem = UEVENT_PLATFORM,
883         .anahsName = "invalid"
884     };
885     EXPECT_EQ(ERROR, audioSocketThread.AudioAnahsDetectDevice(&invalidAnahsName));
886 
887     // Test case 6: Same anahsName as previous event
888     EXPECT_EQ(SUCCESS, audioSocketThread.AudioAnahsDetectDevice(&validUeventRemove));
889     EXPECT_STREQ(UEVENT_REMOVE, AudioSocketThread::audioSocketEvent_.anahsName.c_str());
890 }
891 
892 /**
893 * @tc.name  : Test AudioSocketThread.
894 * @tc.number: AudioSocketThread_038
895 * @tc.desc  : Test SetAudioPnpServerEventValue
896 */
897 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_038, TestSize.Level1)
898 {
899     AudioPnpUevent uevent = {
900         .action = "change",
901         .name = "headset",
902         .state = "invalid",
903         .devType = "extcon",
904         .subSystem = "other",
905         .switchName = "h2w",
906         .switchState = "01",
907         .hidName = "hid",
908         .devName = "TestDevName",
909         .anahsName = "anahs"
910     };
911     AudioEvent event;
912     int32_t result = AudioSocketThread::SetAudioPnpServerEventValue(&event, &uevent);
913     EXPECT_EQ(result, ERROR);
914 }
915 
916 /**
917 * @tc.name  : Test AudioSocketThread.
918 * @tc.number: AudioSocketThread_039
919 * @tc.desc  : Test AudioAnalogHeadsetDetectDevice
920 */
921 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_039, TestSize.Level1)
922 {
923     AudioSocketThread audioSocketThread;
924     // Test case 1: NULL input
925     EXPECT_EQ(HDF_ERR_INVALID_PARAM, audioSocketThread.AudioAnalogHeadsetDetectDevice(nullptr));
926 
927     AudioPnpUevent audioPnpUevent = {
928         .action = "add",
929         .name = "TestDevice",
930         .state = "added",
931         .devType = "headset",
932         .subSystem = "switch",
933         .switchName = "h2w",
934         .switchState = "1",
935         .hidName = "hid",
936         .devName = "TestDevName",
937         .anahsName = "anahs"
938     };
939     int32_t ret = audioSocketThread.AudioAnalogHeadsetDetectDevice(&audioPnpUevent);
940     EXPECT_EQ(ret, SUCCESS);
941 }
942 
943 /**
944  * @tc.name : Test AudioSocketThread.
945  * @tc.number: AudioSocketThread_040
946  * @tc.desc : Test AudioHDMIDetectDevice
947  */
948 HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_040, TestSize.Level1)
949 {
950     AudioSocketThread audioSocketThread;
951     // Test case 1: Invalid parameter (NULL audioPnpUevent)
952     {
953         int32_t result = audioSocketThread.AudioHDMIDetectDevice(nullptr);
954         EXPECT_EQ(result, HDF_ERR_INVALID_PARAM);
955     }
956     // Test case 2: Invalid subSystem
957     {
958         AudioPnpUevent uevent = {
959             .subSystem = "invalid",
960             .switchName = "hdmi_mipi_audio",
961             .action = "change",
962             .switchState = "1"
963         };
964         int32_t result = audioSocketThread.AudioHDMIDetectDevice(&uevent);
965         EXPECT_EQ(result, HDF_ERR_INVALID_PARAM);
966     }
967     // Test case 3: Invalid switchName
968     {
969         AudioPnpUevent uevent = {
970             .subSystem = "switch",
971             .switchName = "invalid",
972             .action = "change",
973             .switchState = "1"
974         };
975         int32_t result = audioSocketThread.AudioHDMIDetectDevice(&uevent);
976         EXPECT_EQ(result, HDF_ERR_INVALID_PARAM);
977     }
978 }
979 
980 /**
981  * @tc.name : Test AudioSocketThread.
982  * @tc.number: AudioSocketThread_041
983  * @tc.desc : Test AudioHDMIDetectDevice
984  */
985  HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_041, TestSize.Level1)
986 {
987     AudioSocketThread audioSocketThread;
988     // Test case 4: Invalid action
989     {
990         AudioPnpUevent uevent = {
991             .subSystem = "switch",
992             .switchName = "hdmi_mipi_audio",
993             .action = "invalid",
994             .switchState = "1"
995         };
996         int32_t result = audioSocketThread.AudioHDMIDetectDevice(&uevent);
997         EXPECT_EQ(result, HDF_ERR_INVALID_PARAM);
998     }
999     // Test case 5: Device Add Event
1000     {
1001         AudioPnpUevent uevent = {
1002             .subSystem = "switch",
1003             .switchName = "hdmi_mipi_audio,device_port=HDMI-0",
1004             .action = "change",
1005             .switchState = "1"
1006         };
1007         int32_t result = audioSocketThread.AudioHDMIDetectDevice(&uevent);
1008         EXPECT_EQ(result, SUCCESS);
1009         // Additional checks can be added here to verify the internal state
1010     }
1011     // Test case 6: Device Remove Event
1012     {
1013         AudioPnpUevent uevent = {
1014             .subSystem = "switch",
1015             .switchName = "hdmi_mipi_audio,device_port=HDMI-0",
1016             .action = "change",
1017             .switchState = "0"
1018         };
1019         int32_t result = audioSocketThread.AudioHDMIDetectDevice(&uevent);
1020         EXPECT_EQ(result, SUCCESS);
1021         // Additional checks can be added here to verify the internal state
1022     }
1023 }
1024 
1025 /**
1026  * @tc.name : Test AudioSocketThread.
1027  * @tc.number: AudioSocketThread_042
1028  * @tc.desc : Test AudioHDMIDetectDevice
1029  */
1030  HWTEST_F(AudioSocketThreadUnitTest, AudioSocketThread_042, TestSize.Level1)
1031 {
1032     AudioSocketThread audioSocketThread;
1033     // Test case 7: Invalid switchState
1034     {
1035         AudioPnpUevent uevent = {
1036             .subSystem = "switch",
1037             .switchName = "hdmi_mipi_audio,device_port=HDMI-0",
1038             .action = "change",
1039             .switchState = "invalid"
1040         };
1041         int32_t result = audioSocketThread.AudioHDMIDetectDevice(&uevent);
1042         EXPECT_EQ(result, ERROR);
1043     }
1044     // Test case 8: No device_port in switchName
1045     {
1046         AudioPnpUevent uevent = {
1047             .subSystem = "switch",
1048             .switchName = "hdmi_mipi_audio,",
1049             .action = "change",
1050             .switchState = "1"
1051         };
1052         int32_t result = audioSocketThread.AudioHDMIDetectDevice(&uevent);
1053         EXPECT_EQ(result, SUCCESS);
1054     }
1055 }
1056 
1057 /**
1058  * @tc.name  : DetectAnalogHeadsetState_Headset_Remove
1059  * @tc.number: Audio_AudioSocketThread_DetectAnalogHeadsetState_003
1060  * @tc.desc  : Test DetectAnalogHeadsetState function when headset is removed.
1061  */
1062 HWTEST_F(AudioSocketThreadUnitTest, DetectAnalogHeadsetState_Headset_Remove, TestSize.Level0)
1063 {
1064     AudioEvent audioEvent;
1065     // Act
1066     int32_t ret = audioSocketThread_.DetectAnalogHeadsetState(&audioEvent);
1067 
1068     // Assert
1069     EXPECT_NE(ret, SUCCESS);
1070 }
1071 
1072 /**
1073  * @tc.name  : DetectDPState_Success_WhenStateAndNameValid
1074  * @tc.number: AudioSocketThreadTest_001
1075  * @tc.desc  : Test DetectDPState function when state and name are valid.
1076  */
1077 HWTEST_F(AudioSocketThreadUnitTest, DetectDPState_Success_WhenStateAndNameValid, TestSize.Level0)
1078 {
1079     AudioEvent audioEvent;
1080     // Arrange
1081     audioEvent.eventType = PNP_EVENT_DEVICE_ADD;
1082     audioEvent.name = "testName";
1083 
1084     // Act
1085     int32_t result = audioSocketThread_.DetectDPState(&audioEvent);
1086 
1087     // Assert
1088     EXPECT_NE(result, SUCCESS);
1089     EXPECT_EQ(audioEvent.deviceType, 0);
1090     EXPECT_EQ(audioEvent.address, "");
1091 }
1092 
1093 /**
1094  * @tc.name  : DetectDPState_Fail_WhenStateInvalid
1095  * @tc.number: AudioSocketThreadTest_002
1096  * @tc.desc  : Test DetectDPState function when state is invalid.
1097  */
1098 HWTEST_F(AudioSocketThreadUnitTest, DetectDPState_Fail_WhenStateInvalid, TestSize.Level0)
1099 {
1100     AudioEvent audioEvent;
1101     // Arrange
1102     audioEvent.eventType = PNP_EVENT_DEVICE_ADD;
1103     audioEvent.name = "testName";
1104 
1105     // Act
1106     int32_t result = audioSocketThread_.DetectDPState(&audioEvent);
1107 
1108     // Assert
1109     EXPECT_EQ(result, ERROR);
1110 }
1111 
1112 /**
1113  * @tc.name  : ReadAndScanDpState_Success_WhenFileContains1
1114  * @tc.number: Audio_AudioSocketThread_ReadAndScanDpState_001
1115  * @tc.desc  : Test ReadAndScanDpState function when file contains '1'
1116  */
1117 HWTEST_F(AudioSocketThreadUnitTest, ReadAndScanDpState_Success_WhenFileContains1, TestSize.Level0)
1118 {
1119     std::string testPath = "/tmp/test_path";
1120     // Given
1121     std::ofstream file(testPath);
1122     file << '1';
1123     file.close();
1124 
1125     uint32_t eventType;
1126     // When
1127     int32_t ret = audioSocketThread_.ReadAndScanDpState(testPath, eventType);
1128 
1129     // Then
1130     EXPECT_EQ(ret, SUCCESS);
1131     EXPECT_EQ(eventType, PNP_EVENT_DEVICE_ADD);
1132 }
1133 
1134 /**
1135  * @tc.name  : AudioNnDetectDevice_InvalidParam_Test
1136  * @tc.number: Audio_AudioSocketThread_AudioNnDetectDevice_001
1137  * @tc.desc  : Test AudioNnDetectDevice function with invalid parameters.
1138  */
1139 HWTEST_F(AudioSocketThreadUnitTest, AudioNnDetectDevice_InvalidParam_Test, TestSize.Level2)
1140 {
1141     EXPECT_EQ(audioSocketThread_.AudioNnDetectDevice(NULL), -3);
1142     struct AudioPnpUevent audioPnpUevent;
1143     audioPnpUevent.action = "add";
1144     audioPnpUevent.name = "send_nn_state1";
1145     EXPECT_EQ(audioSocketThread_.AudioNnDetectDevice(&audioPnpUevent), -3);
1146     audioPnpUevent.action = "change";
1147     audioPnpUevent.name = "test_send_nn_state1";
1148     EXPECT_EQ(audioSocketThread_.AudioNnDetectDevice(&audioPnpUevent), -3);
1149 }
1150 
1151 /**
1152  * @tc.name  : AudioNnDetectDevice_ValidParam_Test
1153  * @tc.number: Audio_AudioSocketThread_AudioNnDetectDevice_002
1154  * @tc.desc  : Test AudioNnDetectDevice function with valid parameters.
1155  */
1156 HWTEST_F(AudioSocketThreadUnitTest, AudioNnDetectDevice_ValidParam_Test, TestSize.Level2)
1157 {
1158     struct AudioPnpUevent audioPnpUevent;
1159     audioPnpUevent.action = "change";
1160     audioPnpUevent.name = "send_nn_state1";
1161     EXPECT_NE(audioSocketThread_.AudioNnDetectDevice(&audioPnpUevent), SUCCESS);
1162 }
1163 
1164 /**
1165  * @tc.name  : AudioNnDetectDevice_StateNotSupported_Test
1166  * @tc.number: Audio_AudioSocketThread_AudioNnDetectDevice_003
1167  * @tc.desc  : Test AudioNnDetectDevice function with state not supported.
1168  */
1169 HWTEST_F(AudioSocketThreadUnitTest, AudioNnDetectDevice_StateNotSupported_Test, TestSize.Level2)
1170 {
1171     struct AudioPnpUevent audioPnpUevent;
1172     audioPnpUevent.action = "change";
1173     audioPnpUevent.name = "send_nn_state00";
1174     EXPECT_NE(audioSocketThread_.AudioNnDetectDevice(&audioPnpUevent), SUCCESS);
1175 }
1176 
1177 /**
1178  * @tc.name  : AudioNnDetectDevice_StateNnOff_Test
1179  * @tc.number: Audio_AudioSocketThread_AudioNnDetectDevice_004
1180  * @tc.desc  : Test AudioNnDetectDevice function with state nn off.
1181  */
1182 HWTEST_F(AudioSocketThreadUnitTest, AudioNnDetectDevice_StateNnOff_Test, TestSize.Level2)
1183 {
1184     struct AudioPnpUevent audioPnpUevent;
1185     audioPnpUevent.action = "change";
1186     audioPnpUevent.name = "send_nn_state01";
1187     EXPECT_EQ(audioSocketThread_.AudioNnDetectDevice(&audioPnpUevent), STATE_NN_OFF);
1188 }
1189 
1190 /**
1191  * @tc.name  : AudioNnDetectDevice_StateNnOn_Test
1192  * @tc.number: Audio_AudioSocketThread_AudioNnDetectDevice_005
1193  * @tc.desc  : Test AudioNnDetectDevice function with state nn on.
1194  */
1195 HWTEST_F(AudioSocketThreadUnitTest, AudioNnDetectDevice_StateNnOn_Test, TestSize.Level2)
1196 {
1197     struct AudioPnpUevent audioPnpUevent;
1198     audioPnpUevent.action = "change";
1199     audioPnpUevent.name = "send_nn_state02";
1200     EXPECT_NE(audioSocketThread_.AudioNnDetectDevice(&audioPnpUevent), SUCCESS);
1201 }
1202 
1203 /**
1204  * @tc.name  : AudioNnDetectDevice_InvalidState_Test
1205  * @tc.number: Audio_AudioSocketThread_AudioNnDetectDevice_006
1206  * @tc.desc  : Test AudioNnDetectDevice function with invalid state.
1207  */
1208 HWTEST_F(AudioSocketThreadUnitTest, AudioNnDetectDevice_InvalidState_Test, TestSize.Level2)
1209 {
1210     struct AudioPnpUevent audioPnpUevent;
1211     audioPnpUevent.action = "change";
1212     audioPnpUevent.name = "send_nn_state04";
1213     EXPECT_EQ(audioSocketThread_.AudioNnDetectDevice(&audioPnpUevent), HDF_ERR_INVALID_PARAM);
1214 }
1215 
1216 /**
1217  * @tc.name  : AudioNnDetectDevice_SendNnStateChangeCallback_Failed_Test
1218  * @tc.number: Audio_AudioSocketThread_AudioNnDetectDevice_007
1219  * @tc.desc  : Test AudioNnDetectDevice function with failed SendNnStateChangeCallback.
1220  */
1221 HWTEST_F(AudioSocketThreadUnitTest, AudioNnDetectDevice_SendNnStateChangeCallback_Failed_Test, TestSize.Level2)
1222 {
1223     struct AudioPnpUevent audioPnpUevent;
1224     audioPnpUevent.action = "change";
1225     audioPnpUevent.name = "send_nn_state03";
1226     EXPECT_EQ(audioSocketThread_.AudioNnDetectDevice(&audioPnpUevent), HDF_ERR_INVALID_PARAM);
1227 }
1228 
1229 /**
1230  * @tc.name  : AudioPnpUeventParse_Test_01
1231  * @tc.number: Audio_AudioPnpUeventParse_001
1232  * @tc.desc  : Test AudioPnpUeventParse function when msg starts with "libudev"
1233  */
1234 HWTEST_F(AudioSocketThreadUnitTest, Audio_AudioPnpUeventParse_001, TestSize.Level0)
1235 {
1236     const char *msg = "libudev";
1237     ssize_t strLength = strlen(msg);
1238     EXPECT_FALSE(audioSocketThread_.AudioPnpUeventParse(msg, strLength));
1239 }
1240 
1241 /**
1242  * @tc.name  : AudioPnpUeventParse_Test_02
1243  * @tc.number: Audio_AudioPnpUeventParse_002
1244  * @tc.desc  : Test AudioPnpUeventParse function when strLength > UEVENT_MSG_LEN + 1
1245  */
1246 HWTEST_F(AudioSocketThreadUnitTest, Audio_AudioPnpUeventParse_002, TestSize.Level0)
1247 {
1248     const char *msg = "test message";
1249     ssize_t strLength = UEVENT_MSG_LEN + 2;
1250     EXPECT_FALSE(audioSocketThread_.AudioPnpUeventParse(msg, strLength));
1251 }
1252 
1253 /**
1254  * @tc.name  : AudioPnpUeventParse_Test_03
1255  * @tc.number: Audio_AudioPnpUeventParse_003
1256  * @tc.desc  : Test AudioPnpUeventParse function when no matching UEVENT_ARR_SIZE is found
1257  */
1258 HWTEST_F(AudioSocketThreadUnitTest, Audio_AudioPnpUeventParse_003, TestSize.Level0)
1259 {
1260     const char *msg = "unmatched event";
1261     ssize_t strLength = strlen(msg);
1262     EXPECT_FALSE(audioSocketThread_.AudioPnpUeventParse(msg, strLength));
1263 }
1264 
1265 /**
1266  * @tc.name  : AudioPnpUeventParse_Test_04
1267  * @tc.number: Audio_AudioPnpUeventParse_004
1268  * @tc.desc  : Test AudioPnpUeventParse function when all detect devices return SUCCESS
1269  */
1270 HWTEST_F(AudioSocketThreadUnitTest, Audio_AudioPnpUeventParse_004, TestSize.Level0)
1271 {
1272     const char *msg = "matched event";
1273     ssize_t strLength = strlen(msg);
1274     EXPECT_FALSE(audioSocketThread_.AudioPnpUeventParse(msg, strLength));
1275 }
1276 
1277 /**
1278  * @tc.name  : DetectAnalogHeadsetState_Fail_OpenFile
1279  * @tc.number: Audio_AudioSocketThread_DetectAnalogHeadsetState_001
1280  * @tc.desc  : Test DetectAnalogHeadsetState function when open file fail.
1281  */
1282 HWTEST_F(AudioSocketThreadUnitTest, DetectAnalogHeadsetState_Fail_OpenFile, TestSize.Level0)
1283 {
1284     std::ofstream ofs;
1285     ofs.open(SWITCH_STATE_PATH, std::ofstream::out);
1286     ofs.close();
1287     unlink(SWITCH_STATE_PATH);
1288     AudioEvent audioEvent;
1289     int32_t ret = audioSocketThread_.DetectAnalogHeadsetState(&audioEvent);
1290     EXPECT_EQ(ret, HDF_ERR_INVALID_PARAM);
1291 }
1292 
1293 /**
1294  * @tc.name  : DetectAnalogHeadsetState_Fail_ReadFile
1295  * @tc.number: Audio_AudioSocketThread_DetectAnalogHeadsetState_002
1296  * @tc.desc  : Test DetectAnalogHeadsetState function when read file fail.
1297  */
1298 HWTEST_F(AudioSocketThreadUnitTest, DetectAnalogHeadsetState_Fail_ReadFile, TestSize.Level0)
1299 {
1300     std::ofstream ofs(SWITCH_STATE_PATH);
1301     ofs.close();
1302     AudioEvent audioEvent;
1303     int32_t ret = audioSocketThread_.DetectAnalogHeadsetState(&audioEvent);
1304     EXPECT_NE(ret, SUCCESS);
1305 }
1306 
1307 /**
1308  * @tc.name  : DetectAnalogHeadsetState_Headset_Remove_003
1309  * @tc.number: Audio_AudioSocketThread_DetectAnalogHeadsetState_003
1310  * @tc.desc  : Test DetectAnalogHeadsetState function when headset is removed.
1311  */
1312 HWTEST_F(AudioSocketThreadUnitTest, DetectAnalogHeadsetState_Headset_Remove_003, TestSize.Level0)
1313 {
1314     std::ofstream ofs(SWITCH_STATE_PATH);
1315     ofs << '0';
1316     ofs.close();
1317     AudioEvent audioEvent;
1318     int32_t hdf_err_invalid_param = -3;
1319     int32_t ret = audioSocketThread_.DetectAnalogHeadsetState(&audioEvent);
1320     EXPECT_EQ(ret, hdf_err_invalid_param);
1321 }
1322 
1323 /**
1324  * @tc.name  : DetectAnalogHeadsetState_Headset_Add_004
1325  * @tc.number: Audio_AudioSocketThread_DetectAnalogHeadsetState_004
1326  * @tc.desc  : Test DetectAnalogHeadsetState function when headset is added.
1327  */
1328 HWTEST_F(AudioSocketThreadUnitTest, DetectAnalogHeadsetState_Headset_Add_004, TestSize.Level0)
1329 {
1330     std::ofstream ofs(SWITCH_STATE_PATH);
1331     ofs << '1';
1332     ofs.close();
1333     AudioEvent audioEvent;
1334     int32_t ret = audioSocketThread_.DetectAnalogHeadsetState(&audioEvent);
1335     int32_t hdf_err_invalid_param = -3;
1336     EXPECT_EQ(ret, hdf_err_invalid_param);
1337 }
1338 
1339 /**
1340  * @tc.name  : ReadAndScanDpName_Success_WhenFileExists
1341  * @tc.number: Audio_AudioSocketThread_ReadAndScanDpName_001
1342  * @tc.desc  : Test ReadAndScanDpName function when file exists and can be read successfully.
1343  */
1344 HWTEST_F(AudioSocketThreadUnitTest, ReadAndScanDpName_Success_WhenFileExists, TestSize.Level0)
1345 {
1346     std::string testPath = "/tmp/test_path";
1347     std::string testName = "test_name";
1348     std::ofstream file(testPath);
1349     file << testName;
1350     file.close();
1351     std::string name;
1352     int32_t ret = audioSocketThread_.ReadAndScanDpName(testPath, name);
1353     EXPECT_EQ(ret, ERROR);
1354     remove(testPath.c_str());
1355 }
1356 
1357 /**
1358  * @tc.name  : ReadAndScanDpName_Fail_WhenFileNotExists
1359  * @tc.number: Audio_AudioSocketThread_ReadAndScanDpName_002
1360  * @tc.desc  : Test ReadAndScanDpName function when file does not exist.
1361  */
1362 HWTEST_F(AudioSocketThreadUnitTest, ReadAndScanDpName_Fail_WhenFileNotExists, TestSize.Level0)
1363 {
1364     std::string testPath = "/tmp/test_path";
1365     std::string testName = "test_name";
1366     std::ofstream file(testPath);
1367     file << testName;
1368     file.close();
1369     std::string name;
1370     int32_t ret = audioSocketThread_.ReadAndScanDpName("/invalid/path", name);
1371     EXPECT_EQ(ret, HDF_ERR_INVALID_PARAM);
1372     remove(testPath.c_str());
1373 }
1374 
1375 /**
1376  * @tc.name  : ReadAndScanDpName_Fail_WhenFileReadFails
1377  * @tc.number: Audio_AudioSocketThread_ReadAndScanDpName_003
1378  * @tc.desc  : Test ReadAndScanDpName function when file read fails.
1379  */
1380 HWTEST_F(AudioSocketThreadUnitTest, ReadAndScanDpName_Fail_WhenFileReadFails, TestSize.Level0)
1381 {
1382     std::string testPath = "/tmp/test_path";
1383     std::string testName = "test_name";
1384     std::ofstream file(testPath);
1385     file << testName;
1386     file.close();
1387     std::string name;
1388     int32_t ret = audioSocketThread_.ReadAndScanDpName("/dev/null", name);
1389     EXPECT_EQ(ret, ERROR);
1390     remove(testPath.c_str());
1391 }
1392 
1393 /**
1394  * @tc.name  : ReadAndScanDpName_Fail_WhenDevicePortNotFound
1395  * @tc.number: Audio_AudioSocketThread_ReadAndScanDpName_004
1396  * @tc.desc  : Test ReadAndScanDpName function when device port not found in file content.
1397  */
1398 HWTEST_F(AudioSocketThreadUnitTest, ReadAndScanDpName_Fail_WhenDevicePortNotFound, TestSize.Level0)
1399 {
1400     std::string testName = "invalid_name";
1401     std::string testPath = "/tmp/test_path";
1402     std::ofstream file(testPath);
1403     file << testName;
1404     file.close();
1405 
1406     std::string name;
1407     int32_t ret = audioSocketThread_.ReadAndScanDpName(testPath, name);
1408     EXPECT_NE(ret, SUCCESS);
1409     remove(testPath.c_str());
1410 }
1411 } // namespace AudioStandard
1412 } // namespace OHOS
1413