Merge changes I6a842960,If618c26b
am: 7920502065
Change-Id: Id568642bd668f5d83f370d366992d93c14e09166
This commit is contained in:
commit
c08a536a32
2 changed files with 39 additions and 18 deletions
|
|
@ -113,16 +113,12 @@ static void CloseWithPacketThreadFunc(CloseWithPacketArg* arg) {
|
||||||
asocket* s = create_local_socket(arg->socket_fd);
|
asocket* s = create_local_socket(arg->socket_fd);
|
||||||
ASSERT_TRUE(s != nullptr);
|
ASSERT_TRUE(s != nullptr);
|
||||||
arg->bytes_written = 0;
|
arg->bytes_written = 0;
|
||||||
while (true) {
|
|
||||||
std::string data;
|
std::string data;
|
||||||
data.resize(MAX_PAYLOAD);
|
data.resize(MAX_PAYLOAD);
|
||||||
arg->bytes_written += data.size();
|
arg->bytes_written += data.size();
|
||||||
int ret = s->enqueue(s, std::move(data));
|
int ret = s->enqueue(s, std::move(data));
|
||||||
if (ret == 1) {
|
ASSERT_EQ(1, ret);
|
||||||
// The writer has one packet waiting to send.
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
asocket* cause_close_s = create_local_socket(arg->cause_close_fd);
|
asocket* cause_close_s = create_local_socket(arg->cause_close_fd);
|
||||||
ASSERT_TRUE(cause_close_s != nullptr);
|
ASSERT_TRUE(cause_close_s != nullptr);
|
||||||
|
|
@ -233,15 +229,16 @@ TEST_F(LocalSocketTest, flush_after_shutdown) {
|
||||||
PrepareThread();
|
PrepareThread();
|
||||||
std::thread thread(fdevent_loop);
|
std::thread thread(fdevent_loop);
|
||||||
|
|
||||||
ASSERT_TRUE(WriteFdExactly(head_fd[0], "foo", 3));
|
EXPECT_TRUE(WriteFdExactly(head_fd[0], "foo", 3));
|
||||||
ASSERT_EQ(0, adb_shutdown(head_fd[0], SHUT_RD));
|
|
||||||
const char* str = "write succeeds, but local_socket will fail to write";
|
|
||||||
ASSERT_TRUE(WriteFdExactly(tail_fd[0], str, strlen(str)));
|
|
||||||
ASSERT_TRUE(WriteFdExactly(head_fd[0], "bar", 3));
|
|
||||||
char buf[6];
|
|
||||||
ASSERT_TRUE(ReadFdExactly(tail_fd[0], buf, 6));
|
|
||||||
|
|
||||||
ASSERT_EQ(0, memcmp(buf, "foobar", 6));
|
EXPECT_EQ(0, adb_shutdown(head_fd[0], SHUT_RD));
|
||||||
|
const char* str = "write succeeds, but local_socket will fail to write";
|
||||||
|
EXPECT_TRUE(WriteFdExactly(tail_fd[0], str, strlen(str)));
|
||||||
|
EXPECT_TRUE(WriteFdExactly(head_fd[0], "bar", 3));
|
||||||
|
|
||||||
|
char buf[6];
|
||||||
|
EXPECT_TRUE(ReadFdExactly(tail_fd[0], buf, 6));
|
||||||
|
EXPECT_EQ(0, memcmp(buf, "foobar", 6));
|
||||||
|
|
||||||
adb_close(head_fd[0]);
|
adb_close(head_fd[0]);
|
||||||
adb_close(tail_fd[0]);
|
adb_close(tail_fd[0]);
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ import string
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import threading
|
||||||
import time
|
import time
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
|
|
@ -493,6 +494,29 @@ class ShellTest(DeviceTest):
|
||||||
stdout, _ = self.device.shell(["cat", log_path])
|
stdout, _ = self.device.shell(["cat", log_path])
|
||||||
self.assertEqual(stdout.strip(), "SIGHUP")
|
self.assertEqual(stdout.strip(), "SIGHUP")
|
||||||
|
|
||||||
|
def test_exit_stress(self):
|
||||||
|
"""Hammer `adb shell exit 42` with multiple threads."""
|
||||||
|
thread_count = 48
|
||||||
|
result = dict()
|
||||||
|
def hammer(thread_idx, thread_count, result):
|
||||||
|
success = True
|
||||||
|
for i in range(thread_idx, 240, thread_count):
|
||||||
|
ret = subprocess.call(['adb', 'shell', 'exit {}'.format(i)])
|
||||||
|
if ret != i % 256:
|
||||||
|
success = False
|
||||||
|
break
|
||||||
|
result[thread_idx] = success
|
||||||
|
|
||||||
|
threads = []
|
||||||
|
for i in range(thread_count):
|
||||||
|
thread = threading.Thread(target=hammer, args=(i, thread_count, result))
|
||||||
|
thread.start()
|
||||||
|
threads.append(thread)
|
||||||
|
for thread in threads:
|
||||||
|
thread.join()
|
||||||
|
for i, success in result.iteritems():
|
||||||
|
self.assertTrue(success)
|
||||||
|
|
||||||
|
|
||||||
class ArgumentEscapingTest(DeviceTest):
|
class ArgumentEscapingTest(DeviceTest):
|
||||||
def test_shell_escaping(self):
|
def test_shell_escaping(self):
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue