labath added a comment.

The actual change looks obviously correct. Below are my comments on the test 
situation.

> I wanted to reuse the CreateConnectedSockets part of the SocketTests. 
> Initially I thought about creating a few functions in a test socket utility 
> file, but then I realized the tests need to initialize the Socket plugin for 
> these functions to work. In the end I created a new class (SocketBasedTest) 
> so I can ensure this plugin is correctly initialized and teared down. 
> However, I'm not a fan of subclassing as a means of code shared (as I prefer 
> composition or delegation). What are your thoughts on this?

I don't think that the necessity of the Socket::Initialize call should prevent 
you from creating free functions. Everything else in lldb dealing with sockets 
already assumes that Socket::Initialize has been called, so I don't see why 
this couldn't be an implicit prerequisite of these functions (or you can even 
document it explicitly if you want). Though I generally also prefer free 
functions, I'm fairly ambivalent in this case, so I'll leave it up to you 
whether you want to leave this as a separate class, or convert it into a bunch 
of free functions. (If you do leave it as-is, I think you should at least 
remove the `setUp/tearDown overrides in the derived classes as they're pretty 
useless now - you're just overriding the methods with identical 
implementations.).

> Another question I have (and this is more a n00b question as I don't have 
> prior c++ experience), the CreateConnectedSockets functions that exist use 
> unique pointers, and after reading the documentation about this I decided to 
> use .release() so I could safely pass them to the ConnectionFileDescriptor in 
> the test I created for it. Should I have changed the unique pointers to 
> shared pointers instead?

Using `release` is the correct thing to do here as ConnectionFileDescriptor 
takes ownership of the passed-in object. What would be a nice improvement here 
would be to change the interface of ConnectionFileDescriptor constructor so 
that it takes a `unique_ptr` instead of a raw pointer. That way, you would just 
say `ConnectionFileDescriptor(std::move(whatever_up))`. That way the ownership 
part would be explicitly documented (now, I've had to look at the source to 
check the ownership semantics).  If you want to do that please make a separate 
patch for that.



================
Comment at: lldb/unittests/Host/ConnectionFileDescriptorTest.cpp:40
+    EXPECT_TRUE(UriParser::Parse(connection_file_descriptor.GetURI(), scheme, 
hostname, port, path));
+    EXPECT_STREQ(ip.c_str(), hostname.str().c_str());
+    EXPECT_EQ(socket->GetRemotePortNumber(), port);
----------------
You can just do `EXPECT_EQ(ip, hostname)`


================
Comment at: lldb/unittests/Host/SocketBasedTest.cpp:63-68
+  // Return false if the host doesn't support this interface.
+  auto addresses = lldb_private::SocketAddress::GetAddressInfo(
+      listen_remote_ip.c_str(), NULL, AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP);
+  if (addresses.size() == 0) {
+    return false;
+  }
----------------
The fact that you felt the need to place `// this does foo` comments everywhere 
is a signal that this behavior is unintuitive. I think it would be better to 
split this part into a separate function, and name it something like 
`IsAddressFamilySupported`. Then each test can do something like:
```
if (!IsAddressFamilySupported(...)) {
  GTEST_LOG_(WARNING) << "Skipping test due to missing ??? support.";
  return;
}


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D61833/new/

https://reviews.llvm.org/D61833



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to