Re: [PATCH] KVM test: Modifying finish.exe to support parallel installs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 2010-02-14 at 11:21 -0500, Michael Goldish wrote:
> ----- "Lucas Meneghel Rodrigues" <lmr@xxxxxxxxxx> wrote:
> 
> > In order to adapt all the OS unattended installs to parallel
> > installs, finish.exe also had to be adapted to be a server
> > instead of a client. These are the modifications needed.
> > 
> > Once the whole patchset is worked out, an updated version
> > of finish.exe will be shipped on version control.
> > 
> > Signed-off-by: Lucas Meneghel Rodrigues <lmr@xxxxxxxxxx>
> 
> Now that finish.exe is a server it looks like a stripped version
> of rss.exe.  Since we're already running rss.exe at the end of
> each unattended_install, why not just use VM.remote_login() to
> verify that the installation was successful?

If we can guarantee that the sshd daemon is up and running by the end of
linux guest installs, then that is a perfectly fine solution. Need to
check though.

> >  client/tests/kvm/deps/finish.cpp |  111
> > ++++++++++++++++++++------------------
> >  1 files changed, 59 insertions(+), 52 deletions(-)
> > 
> > diff --git a/client/tests/kvm/deps/finish.cpp
> > b/client/tests/kvm/deps/finish.cpp
> > index 9c2867c..e5ba128 100644
> > --- a/client/tests/kvm/deps/finish.cpp
> > +++ b/client/tests/kvm/deps/finish.cpp
> > @@ -1,12 +1,13 @@
> > -// Simple app that only sends an ack string to the KVM unattended
> > install
> > -// watch code.
> > +// Simple application that creates a server socket, listening for
> > connections
> > +// of the unattended install test. Once it gets a client connected,
> > the
> > +// app will send back an ACK string, indicating the install process
> > is done.
> >  //
> >  // You must link this code with Ws2_32.lib, Mswsock.lib, and
> > Advapi32.lib
> >  //
> >  // Author: Lucas Meneghel Rodrigues <lmr@xxxxxxxxxx>
> >  // Code was adapted from an MSDN sample.
> >  
> > -// Usage: finish.exe [Host OS IP]
> > +// Usage: finish.exe
> >  
> >  // MinGW's ws2tcpip.h only defines getaddrinfo and other functions
> > only for
> >  // the case _WIN32_WINNT >= 0x0501.
> > @@ -21,24 +22,18 @@
> >  #include <stdlib.h>
> >  #include <stdio.h>
> >  
> > -#define DEFAULT_BUFLEN 512
> >  #define DEFAULT_PORT "12323"
> > -
> >  int main(int argc, char **argv)
> >  {
> >      WSADATA wsaData;
> > -    SOCKET ConnectSocket = INVALID_SOCKET;
> > -    struct addrinfo *result = NULL,
> > -                    *ptr = NULL,
> > -                    hints;
> > +    SOCKET ListenSocket = INVALID_SOCKET, ClientSocket =
> > INVALID_SOCKET;
> > +    struct addrinfo *result = NULL, hints;
> >      char *sendbuf = "done";
> > -    char recvbuf[DEFAULT_BUFLEN];
> > -    int iResult;
> > -    int recvbuflen = DEFAULT_BUFLEN;
> > +    int iResult, iSendResult;
> >  
> >      // Validate the parameters
> > -    if (argc != 2) {
> > -        printf("usage: %s server-name\n", argv[0]);
> > +    if (argc != 1) {
> > +        printf("usage: %s", argv[0]);
> >          return 1;
> >      }
> >  
> > @@ -49,72 +44,84 @@ int main(int argc, char **argv)
> >          return 1;
> >      }
> >  
> > -    ZeroMemory( &hints, sizeof(hints) );
> > -    hints.ai_family = AF_UNSPEC;
> > +    ZeroMemory(&hints, sizeof(hints));
> > +    hints.ai_family = AF_INET;
> >      hints.ai_socktype = SOCK_STREAM;
> >      hints.ai_protocol = IPPROTO_TCP;
> > +    hints.ai_flags = AI_PASSIVE;
> >  
> >      // Resolve the server address and port
> > -    iResult = getaddrinfo(argv[1], DEFAULT_PORT, &hints, &result);
> > -    if ( iResult != 0 ) {
> > +    iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
> > +    if (iResult != 0) {
> >          printf("getaddrinfo failed: %d\n", iResult);
> >          WSACleanup();
> >          return 1;
> >      }
> >  
> > -    // Attempt to connect to an address until one succeeds
> > -    for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) {
> > -
> > -        // Create a SOCKET for connecting to server
> > -        ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype,
> > -            ptr->ai_protocol);
> > -        if (ConnectSocket == INVALID_SOCKET) {
> > -            printf("Error at socket(): %ld\n", WSAGetLastError());
> > -            freeaddrinfo(result);
> > -            WSACleanup();
> > -            return 1;
> > -        }
> > -
> > -        // Connect to server.
> > -        iResult = connect( ConnectSocket, ptr->ai_addr,
> > (int)ptr->ai_addrlen);
> > -        if (iResult == SOCKET_ERROR) {
> > -            closesocket(ConnectSocket);
> > -            ConnectSocket = INVALID_SOCKET;
> > -            continue;
> > -        }
> > -        break;
> > +    // Create a SOCKET for connecting to server
> > +    ListenSocket = socket(result->ai_family, result->ai_socktype,
> > +                          result->ai_protocol);
> > +    if (ListenSocket == INVALID_SOCKET) {
> > +        printf("socket failed: %ld\n", WSAGetLastError());
> > +        freeaddrinfo(result);
> > +        WSACleanup();
> > +        return 1;
> > +    }
> > +
> > +    // Setup the TCP listening socket
> > +    iResult = bind(ListenSocket, result->ai_addr,
> > (int)result->ai_addrlen);
> > +    if (iResult == SOCKET_ERROR) {
> > +        printf("bind failed: %d\n", WSAGetLastError());
> > +        freeaddrinfo(result);
> > +        closesocket(ListenSocket);
> > +        WSACleanup();
> > +        return 1;
> >      }
> >  
> >      freeaddrinfo(result);
> >  
> > -    if (ConnectSocket == INVALID_SOCKET) {
> > -        printf("Unable to connect to server!\n");
> > +    iResult = listen(ListenSocket, SOMAXCONN);
> > +    if (iResult == SOCKET_ERROR) {
> > +        printf("listen failed: %d\n", WSAGetLastError());
> > +        closesocket(ListenSocket);
> >          WSACleanup();
> >          return 1;
> >      }
> >  
> > -    // Send the ACK buffer
> > -    iResult = send( ConnectSocket, sendbuf, (int)strlen(sendbuf), 0
> > );
> > -    if (iResult == SOCKET_ERROR) {
> > -        printf("send failed: %d\n", WSAGetLastError());
> > -        closesocket(ConnectSocket);
> > +    // Accept a client socket
> > +    ClientSocket = accept(ListenSocket, NULL, NULL);
> > +    if (ClientSocket == INVALID_SOCKET) {
> > +        printf("accept failed: %d\n", WSAGetLastError());
> > +        closesocket(ListenSocket);
> >          WSACleanup();
> >          return 1;
> >      }
> >  
> > -    printf("Bytes Sent: %ld\n", iResult);
> > +    // No longer need the server socket
> > +    closesocket(ListenSocket);
> > +
> > +    // Send the ack string to the client
> > +    iSendResult = send(ClientSocket, sendbuf, sizeof(sendbuf), 0);
> > +    if (iSendResult == SOCKET_ERROR) {
> > +        printf("send failed: %d\n", WSAGetLastError());
> > +        closesocket(ClientSocket);
> > +        WSACleanup();
> > +        return 1;
> > +    }
> > +    // Report the number of bytes sent
> > +    printf("Bytes sent: %d\n", iSendResult);
> >  
> > -    // shutdown the connection since no more data will be sent
> > -    iResult = shutdown(ConnectSocket, SD_SEND);
> > +    // Shutdown the connection since we're done
> > +    iResult = shutdown(ClientSocket, SD_SEND);
> >      if (iResult == SOCKET_ERROR) {
> >          printf("shutdown failed: %d\n", WSAGetLastError());
> > -        closesocket(ConnectSocket);
> > +        closesocket(ClientSocket);
> >          WSACleanup();
> >          return 1;
> >      }
> >  
> > -    // cleanup
> > -    closesocket(ConnectSocket);
> > +    // Cleanup
> > +    closesocket(ClientSocket);
> >      WSACleanup();
> >  
> >      return 0;
> > -- 
> > 1.6.6.1
> > 
> > --
> > To unsubscribe from this list: send the line "unsubscribe kvm" in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux