Best Powermock code snippet using sun.tools.attach.BsdVirtualMachine.close
Source:BsdVirtualMachine.java
...96 int s = socket();97 try {98 connect(s, path);99 } finally {100 close(s);101 }102 }103 /**104 * Detach from the target VM105 */106 public void detach() throws IOException {107 synchronized (this) {108 if (this.path != null) {109 this.path = null;110 }111 }112 }113 // protocol version114 private final static String PROTOCOL_VERSION = "1";115 // known errors116 private final static int ATTACH_ERROR_BADVERSION = 101;117 /**118 * Execute the given command in the target VM.119 */120 InputStream execute(String cmd, Object ... args) throws AgentLoadException, IOException {121 assert args.length <= 3; // includes null122 // did we detach?123 String p;124 synchronized (this) {125 if (this.path == null) {126 throw new IOException("Detached from target VM");127 }128 p = this.path;129 }130 // create UNIX socket131 int s = socket();132 // connect to target VM133 try {134 connect(s, p);135 } catch (IOException x) {136 close(s);137 throw x;138 }139 IOException ioe = null;140 // connected - write request141 // <ver> <cmd> <args...>142 try {143 writeString(s, PROTOCOL_VERSION);144 writeString(s, cmd);145 for (int i=0; i<3; i++) {146 if (i < args.length && args[i] != null) {147 writeString(s, (String)args[i]);148 } else {149 writeString(s, "");150 }151 }152 } catch (IOException x) {153 ioe = x;154 }155 // Create an input stream to read reply156 SocketInputStream sis = new SocketInputStream(s);157 // Read the command completion status158 int completionStatus;159 try {160 completionStatus = readInt(sis);161 } catch (IOException x) {162 sis.close();163 if (ioe != null) {164 throw ioe;165 } else {166 throw x;167 }168 }169 if (completionStatus != 0) {170 // read from the stream and use that as the error message171 String message = readErrorMessage(sis);172 sis.close();173 // In the event of a protocol mismatch then the target VM174 // returns a known error so that we can throw a reasonable175 // error.176 if (completionStatus == ATTACH_ERROR_BADVERSION) {177 throw new IOException("Protocol mismatch with target VM");178 }179 // Special-case the "load" command so that the right exception is180 // thrown.181 if (cmd.equals("load")) {182 throw new AgentLoadException("Failed to load agent library");183 } else {184 if (message == null) {185 throw new AttachOperationFailedException("Command failed in target VM");186 } else {187 throw new AttachOperationFailedException(message);188 }189 }190 }191 // Return the input stream so that the command output can be read192 return sis;193 }194 /*195 * InputStream for the socket connection to get target VM196 */197 private class SocketInputStream extends InputStream {198 int s;199 public SocketInputStream(int s) {200 this.s = s;201 }202 public synchronized int read() throws IOException {203 byte b[] = new byte[1];204 int n = this.read(b, 0, 1);205 if (n == 1) {206 return b[0] & 0xff;207 } else {208 return -1;209 }210 }211 public synchronized int read(byte[] bs, int off, int len) throws IOException {212 if ((off < 0) || (off > bs.length) || (len < 0) ||213 ((off + len) > bs.length) || ((off + len) < 0)) {214 throw new IndexOutOfBoundsException();215 } else if (len == 0) {216 return 0;217 }218 return BsdVirtualMachine.read(s, bs, off, len);219 }220 public void close() throws IOException {221 BsdVirtualMachine.close(s);222 }223 }224 // Return the socket file for the given process.225 // Checks temp directory for .java_pid<pid>.226 private String findSocketFile(int pid) {227 String fn = ".java_pid" + pid;228 File f = new File(tmpdir, fn);229 return f.exists() ? f.getPath() : null;230 }231 /*232 * Write/sends the given to the target VM. String is transmitted in233 * UTF-8 encoding.234 */235 private void writeString(int fd, String s) throws IOException {236 if (s.length() > 0) {237 byte b[];238 try {239 b = s.getBytes("UTF-8");240 } catch (java.io.UnsupportedEncodingException x) {241 throw new InternalError();242 }243 BsdVirtualMachine.write(fd, b, 0, b.length);244 }245 byte b[] = new byte[1];246 b[0] = 0;247 write(fd, b, 0, 1);248 }249 //-- native methods250 static native void sendQuitTo(int pid) throws IOException;251 static native void checkPermissions(String path) throws IOException;252 static native int socket() throws IOException;253 static native void connect(int fd, String path) throws IOException;254 static native void close(int fd) throws IOException;255 static native int read(int fd, byte buf[], int off, int bufLen) throws IOException;256 static native void write(int fd, byte buf[], int off, int bufLen) throws IOException;257 static native void createAttachFile(String path);258 static native String getTempDir();259 static {260 System.loadLibrary("attach");261 tmpdir = getTempDir();262 }263}...
Source:patch-j2se-attach-BSDVirtualMachine.java
...96+ int s = socket();97+ try {98+ connect(s, path);99+ } finally {100+ close(s);101+ }102+ }103+104+ /**105+ * Detach from the target VM106+ */107+ public void detach() throws IOException {108+ synchronized (this) {109+ if (this.path != null) {110+ this.path = null;111+ }112+ }113+ }114+115+ // protocol version116+ private final static String PROTOCOL_VERSION = "1";117+118+ // known errors119+ private final static int ATTACH_ERROR_BADVERSION = 101;120+ 121+ /**122+ * Execute the given command in the target VM.123+ */ 124+ InputStream execute(String cmd, Object ... args) throws AgentLoadException, IOException {125+ assert args.length <= 3; // includes null126+127+ // did we detach?128+ String p;129+ synchronized (this) {130+ if (this.path == null) {131+ throw new IOException("Detached from target VM");132+ }133+ p = this.path;134+ }135+136+ // create UNIX socket137+ int s = socket();138+139+ // connect to target VM140+ try {141+ connect(s, p);142+ } catch (IOException x) {143+ close(s);144+ throw x;145+ }146+147+ IOException ioe = null;148+149+ // connected - write request150+ // <ver> <cmd> <args...>151+ try {152+ writeString(s, PROTOCOL_VERSION);153+ writeString(s, cmd);154+155+ for (int i=0; i<3; i++) {156+ if (i < args.length && args[i] != null) {157+ writeString(s, (String)args[i]);158+ } else {159+ writeString(s, "");160+ }161+ }162+ } catch (IOException x) {163+ ioe = x;164+ }165+ 166+167+ // Create an input stream to read reply168+ SocketInputStream sis = new SocketInputStream(s);169+170+ // Read the command completion status171+ int completionStatus;172+ try {173+ completionStatus = readInt(sis);174+ } catch (IOException x) {175+ sis.close();176+ if (ioe != null) {177+ throw ioe;178+ } else {179+ throw x;180+ }181+ }182+183+ if (completionStatus != 0) {184+ sis.close();185+186+ // In the event of a protocol mismatch then the target VM187+ // returns a known error so that we can throw a reasonable188+ // error.189+ if (completionStatus == ATTACH_ERROR_BADVERSION) {190+ throw new IOException("Protocol mismatch with target VM");191+ }192+193+ // Special-case the "load" command so that the right exception is194+ // thrown.195+ if (cmd.equals("load")) {196+ throw new AgentLoadException("Failed to load agent library");197+ } else {198+ throw new IOException("Command failed in target VM");199+ }200+ }201+202+ // Return the input stream so that the command output can be read203+ return sis;204+ }205+206+ /*207+ * InputStream for the socket connection to get target VM208+ */209+ private class SocketInputStream extends InputStream {210+ int s;211+212+ public SocketInputStream(int s) {213+ this.s = s;214+ }215+216+ public synchronized int read() throws IOException {217+ byte b[] = new byte[1];218+ int n = this.read(b, 0, 1);219+ if (n == 1) {220+ return b[0] & 0xff;221+ } else {222+ return -1;223+ }224+ }225+226+ public synchronized int read(byte[] bs, int off, int len) throws IOException {227+ if ((off < 0) || (off > bs.length) || (len < 0) ||228+ ((off + len) > bs.length) || ((off + len) < 0)) {229+ throw new IndexOutOfBoundsException();230+ } else if (len == 0)231+ return 0;232+233+ return BSDVirtualMachine.read(s, bs, off, len);234+ }235+236+ public void close() throws IOException {237+ BSDVirtualMachine.close(s);238+ }239+ }240+241+242+ // Return the socket file for the given process.243+ // Checks working directory of process for .java_pid<pid>. If not244+ // found it looks in /tmp.245+ private String findSocketFile(int pid) {246+ // First check for a .java_pid<pid> file in the working directory247+ // of the target process248+ String fn = ".java_pid" + pid;249+ String path = getTmpDir() + fn;250+ File f = new File(path);251+252+ if (!f.exists()) {253+ return null; // not found254+ }255+ return path;256+ }257+258+ /*259+ * Write/sends the given to the target VM. String is transmitted in260+ * UTF-8 encoding.261+ */262+ private void writeString(int fd, String s) throws IOException {263+ if (s.length() > 0) {264+ byte b[];265+ try {266+ b = s.getBytes("UTF-8");267+ } catch (java.io.UnsupportedEncodingException x) { 268+ throw new InternalError();269+ } 270+ BSDVirtualMachine.write(fd, b, 0, b.length);271+ }272+ byte b[] = new byte[1];273+ b[0] = 0;274+ write(fd, b, 0, 1);275+ }276+277+278+ static native void sendQuitTo(int pid) throws IOException;279+280+ static native void checkPermissions(String path) throws IOException;281+282+ static native int socket() throws IOException;283+284+ static native void connect(int fd, String path) throws IOException;285+286+ static native void close(int fd) throws IOException;287+288+ static native int read(int fd, byte buf[], int off, int bufLen) throws IOException;289+290+ static native void write(int fd, byte buf[], int off, int bufLen) throws IOException;291+ static native void createAttachFile(String path);292+293+ static {294+ System.loadLibrary("attach");295+ }296+}...
close
Using AI Code Generation
1import sun.tools.attach.BsdVirtualMachine;2import sun.tools.attach.BsdVirtualMachineDescriptor;3import java.util.List;4public class 4 {5 public static void main(String args[]) throws Exception {6 List<BsdVirtualMachineDescriptor> list = BsdVirtualMachine.list();7 for (BsdVirtualMachineDescriptor bsdVirtualMachineDescriptor : list) {8 BsdVirtualMachine bsdVirtualMachine = BsdVirtualMachine.attach(bsdVirtualMachineDescriptor);9 bsdVirtualMachine.close();10 }11 }12}13import sun.tools.attach.BsdVirtualMachine;14import sun.tools.attach.BsdVirtualMachineDescriptor;15import java.util.List;16public class 5 {17 public static void main(String args[]) throws Exception {18 List<BsdVirtualMachineDescriptor> list = BsdVirtualMachine.list();19 for (BsdVirtualMachineDescriptor bsdVirtualMachineDescriptor : list) {20 BsdVirtualMachine bsdVirtualMachine = BsdVirtualMachine.attach(bsdVirtualMachineDescriptor);21 bsdVirtualMachine.detach();22 }23 }24}25import sun.tools.attach.BsdVirtualMachine;26import sun.tools.attach.BsdVirtualMachineDescriptor;27import java.util.List;28public class 6 {29 public static void main(String args[]) throws Exception {30 List<BsdVirtualMachineDescriptor> list = BsdVirtualMachine.list();31 for (BsdVirtualMachineDescriptor bsdVirtualMachineDescriptor : list) {32 BsdVirtualMachine bsdVirtualMachine = BsdVirtualMachine.attach(bsdVirtualMachineDescriptor);33 bsdVirtualMachine.loadAgentLibrary("agentLib", "agentArgs");34 }35 }36}37import sun.tools.attach.BsdVirtualMachine;38import sun.tools.attach.BsdVirtualMachineDescriptor;39import java.util.List;40public class 7 {41 public static void main(String args[]) throws Exception {42 List<BsdVirtualMachineDescriptor> list = BsdVirtualMachine.list();43 for (BsdVirtualMachineDescriptor bsdVirtualMachineDescriptor : list) {44 BsdVirtualMachine bsdVirtualMachine = BsdVirtualMachine.attach(bsdVirtualMachineDescriptor);
close
Using AI Code Generation
1import sun.tools.attach.BsdVirtualMachine;2import java.lang.reflect.Method;3import java.lang.reflect.InvocationTargetException;4public class 4 {5 public static void main(String[] args) throws Exception {6 if (args.length != 1) {7 System.out.println("Usage: java 4 <pid>");8 System.exit(1);9 }10 int pid = Integer.parseInt(args[0]);11 System.out.println("PID = " + pid);12 BsdVirtualMachine vm = new BsdVirtualMachine(pid);13 Method closeMethod = BsdVirtualMachine.class.getDeclaredMethod("close");14 closeMethod.setAccessible(true);15 closeMethod.invoke(vm);16 System.out.println("Invoked close method of BsdVirtualMachine class");17 }18}19import sun.tools.attach.LinuxVirtualMachine;20import java.lang.reflect.Method;21import java.lang.reflect.InvocationTargetException;22public class 5 {23 public static void main(String[] args) throws Exception {24 if (args.length != 1) {25 System.out.println("Usage: java 5 <pid>");26 System.exit(1);27 }28 int pid = Integer.parseInt(args[0]);29 System.out.println("PID = " + pid);30 LinuxVirtualMachine vm = new LinuxVirtualMachine(pid);31 Method closeMethod = LinuxVirtualMachine.class.getDeclaredMethod("close");32 closeMethod.setAccessible(true);33 closeMethod.invoke(vm);34 System.out.println("Invoked close method of LinuxVirtualMachine class");35 }36}37import sun.tools.attach.SolarisVirtualMachine;38import java.lang.reflect.Method;39import java.lang.reflect.InvocationTargetException;40public class 6 {41 public static void main(String[] args) throws Exception {42 if (args.length != 1) {43 System.out.println("Usage: java 6 <pid>");44 System.exit(1);45 }46 int pid = Integer.parseInt(args[0]);47 System.out.println("PID = " + pid);48 SolarisVirtualMachine vm = new SolarisVirtualMachine(pid);49 Method closeMethod = SolarisVirtualMachine.class.getDeclaredMethod("close");50 closeMethod.setAccessible(true);51 closeMethod.invoke(vm);52 System.out.println("Invoked close method of SolarisVirtualMachine
close
Using AI Code Generation
1import java.io.*;2import java.lang.reflect.*;3import java.util.*;4import sun.tools.attach.*;5public class 4 {6 public static void main(String[] args) throws Exception {7 BsdVirtualMachine vm = new BsdVirtualMachine(0);8 vm.close();9 }10}11import java.io.*;12import java.lang.reflect.*;13import java.util.*;14import sun.tools.attach.*;15public class 5 {16 public static void main(String[] args) throws Exception {17 BsdVirtualMachine vm = new BsdVirtualMachine(0);18 vm.detach();19 }20}21import java.io.*;22import java.lang.reflect.*;23import java.util.*;24import sun.tools.attach.*;25public class 6 {26 public static void main(String[] args) throws Exception {27 BsdVirtualMachine vm = new BsdVirtualMachine(0);28 vm.getSystemProperties();29 }30}31import java.io.*;32import java.lang.reflect.*;33import java.util.*;34import sun.tools.attach.*;35public class 7 {36 public static void main(String[] args) throws Exception {37 BsdVirtualMachine vm = new BsdVirtualMachine(0);38 vm.loadAgentLibrary("libattach.so", "agent");39 }40}41import java.io.*;42import java.lang.reflect.*;43import java.util.*;44import sun.tools.attach.*;45public class 8 {46 public static void main(String[] args) throws Exception {47 BsdVirtualMachine vm = new BsdVirtualMachine(0);48 vm.loadAgentPath("libattach.so", "agent");49 }50}51import java.io.*;52import java.lang.reflect.*;53import java.util.*;54import sun.tools.attach.*;55public class 9 {56 public static void main(String[] args) throws Exception {57 BsdVirtualMachine vm = new BsdVirtualMachine(0);58 vm.loadAgentPath("/libattach.so", "agent");59 }60}
close
Using AI Code Generation
1import sun.tools.attach.BsdVirtualMachine;2import java.io.IOException;3import java.lang.reflect.Field;4import java.lang.reflect.InvocationTargetException;5import java.lang.reflect.Method;6import java.lang.reflect.Modifier;7public class 4 {8 public static void main(String[] args) throws IOException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {9 BsdVirtualMachine bsdVirtualMachine = new BsdVirtualMachine(args[0]);10 Field pidField = bsdVirtualMachine.getClass().getDeclaredField("pid");11 pidField.setAccessible(true);12 Method closeMethod = bsdVirtualMachine.getClass().getDeclaredMethod("close");13 closeMethod.setAccessible(true);14 int pid = pidField.getInt(bsdVirtualMachine);15 System.out.println("pid = " + pid);16 closeMethod.invoke(bsdVirtualMachine);17 System.out.println("closed");18 }19}20import sun.tools.attach.LinuxVirtualMachine;21import java.io.IOException;22import java.lang.reflect.Field;23import java.lang.reflect.InvocationTargetException;24import java.lang.reflect.Method;25import java.lang.reflect.Modifier;26public class 5 {27 public static void main(String[] args) throws IOException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {28 LinuxVirtualMachine linuxVirtualMachine = new LinuxVirtualMachine(args[0]);29 Field pidField = linuxVirtualMachine.getClass().getDeclaredField("pid");30 pidField.setAccessible(true);31 Method closeMethod = linuxVirtualMachine.getClass().getDeclaredMethod("close");32 closeMethod.setAccessible(true);33 int pid = pidField.getInt(linuxVirtualMachine);34 System.out.println("pid = " + pid);35 closeMethod.invoke(linuxVirtualMachine);36 System.out.println("closed");37 }38}39import sun.tools.attach.SolarisVirtualMachine;40import java.io.IOException;41import java.lang.reflect.Field;42import java.lang.reflect.InvocationTargetException;43import java.lang.reflect.Method;44import java.lang.reflect.Modifier;45public class 6 {46 public static void main(String[] args) throws IOException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {47 SolarisVirtualMachine solarisVirtualMachine = new SolarisVirtualMachine(args[0]);
close
Using AI Code Generation
1import sun.tools.attach.BsdVirtualMachine;2import java.io.IOException;3import java.lang.reflect.Method;4import java.lang.reflect.InvocationTargetException;5public class Test {6 public static void main(String[] args) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {7 BsdVirtualMachine vm = new BsdVirtualMachine("1234");8 Method closeMethod = vm.getClass().getDeclaredMethod("close");9 closeMethod.setAccessible(true);10 closeMethod.invoke(vm);11 }12}13Test.java:13: error: close() in BsdVirtualMachine cannot be applied to given types;14 closeMethod.invoke(vm);15import sun.tools.attach.BsdVirtualMachine;16import java.io.IOException;17import java.lang.reflect.Method;18import java.lang.reflect.InvocationTargetException;19public class Test {20 public static void main(String[] args) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {21 BsdVirtualMachine vm = new BsdVirtualMachine("1234");22 Method closeMethod = vm.getClass().getDeclaredMethod("close");23 closeMethod.setAccessible(true);24 closeMethod.invoke(vm);25 }26}27import sun.tools.attach.LinuxVirtualMachine;28import java.io.IOException;29import java.lang.reflect.Method;30import java.lang.reflect.InvocationTargetException;31public class Test {32 public static void main(String[] args) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {33 LinuxVirtualMachine vm = new LinuxVirtualMachine("1234");34 Method closeMethod = vm.getClass().getDeclaredMethod("close");35 closeMethod.setAccessible(true);36 closeMethod.invoke(vm);37 }38}39import sun.tools.attach
close
Using AI Code Generation
1import com.sun.tools.attach.*;2import java.io.IOException;3import java.util.List;4public class 4 {5public static void main(String[] args) throws IOException {6List <VirtualMachineDescriptor> list=VirtualMachine.list();7for(VirtualMachineDescriptor vmd:list){8System.out.println(vmd.id()+" "+vmd.displayName());9}10VirtualMachine vm=VirtualMachine.attach("279");11vm.close();12}13}14java.io.IOException: Connection refused (Connection refused)15at sun.tools.attach.BsdVirtualMachine.execute(BsdVirtualMachine.java:100)16at sun.tools.attach.BsdVirtualMachine.close(BsdVirtualMachine.java:92)17at 4.main(4.java:13)
close
Using AI Code Generation
1import sun.tools.attach.*;2import java.io.IOException;3public class 4 {4 public static void main(String args[]) {5 try {6 BsdVirtualMachine vm = new BsdVirtualMachine("1234");7 vm.close();8 } catch (IOException e) {9 e.printStackTrace();10 }11 }12}13 at sun.tools.attach.BsdVirtualMachine.close(BsdVirtualMachine.java:99)14 at 4.main(4.java:8)
close
Using AI Code Generation
1import sun.tools.attach.*;2import sun.tools.attach.BsdVirtualMachine;3import sun.tools.attach.BsdVirtualMachineDescriptor;4import java.util.*;5import java.io.*;6import java.lang.management.*;7import java.lang.reflect.*;8import java.util.List;9import java.net.*;10import java.lang.*;11import java.io.*;12import java.util.*;13import java.net.*;14import java.io.*;15import java.lang.reflect.*;16import java.net.*;17import java.io.*;18import java.lang.reflect.*;19import java.util.*;20import java.lang.management.*;21import java.lang.reflect.*;22import java.util.List;23import java.net.*;24import java.lang.*;25import java.io.*;26import java.util.*;27import java.net.*;28import java.io.*;29import java.lang.reflect.*;30import java.net.*;31import java.io.*;32import java.lang.reflect.*;33import java.util.*;34import java.lang.management.*;35import java.lang.reflect.*;36import java.util.List;37import java.net.*;38import java.lang.*;39import java.io.*;40import java.util.*;41import java.net.*;42import java.io.*;43import java.lang.reflect.*;44import java.net.*;45import java.io.*;46import java.lang.reflect.*;47import java.util.*;48import java.lang.management.*;49import java.lang.reflect.*;50import java.util.List;51import java.net.*;52import java.lang.*;53import java.io.*;54import java.util.*;55import java.net.*;56import java.io.*;57import java.lang.reflect.*;58import java.net.*;59import java.io.*;60import java.lang.reflect.*;61import java.util.*;62import java.lang.management.*;63import java.lang.reflect.*;64import java.util.List;65import java.net.*;66import java.lang.*;67import java.io.*;68import java.util.*;69import java.net.*;70import java.io.*;71import java.lang.reflect.*;72import java.net.*;73import java.io.*;74import java.lang.reflect.*;75import java.util.*;76import java.lang.management.*;77import java.lang.reflect.*;78import java.util.List;79import java.net.*;80import java.lang.*;81import java.io.*;82import java.util.*;83import java.net.*;84import java.io.*;85import java.lang.reflect.*;86import java.net.*;87import java.io.*;88import java.lang.reflect.*;89import java.util.*;90import java.lang.management.*;91import java.lang.reflect.*;92import java.util.List;93import java.net.*;94import java.lang.*;95import java.io.*;96import java.util.*;97import java.net.*;98import java.io.*;99import java.lang.reflect.*;100import java.net.*;101import java.io.*;102import java.lang.reflect.*;103import java.util.*;104import java.lang.management.*;105import java.lang.reflect.*;106import java.util.List;107import java.net.*;108import java.lang.*;109import java.io.*;110import java.util.*;111import
close
Using AI Code Generation
1import sun.tools.attach.BsdVirtualMachine;2import java.util.Properties;3import java.io.IOException;4public class 4 {5 public static void main(String[] args) {6 System.out.println("code to use close method of sun.tools.attach.BsdVirtualMachine class");7 System.out.println("to close the connection to the local Java virtual machine");8 System.out.println("Tested on Solaris 109");10 try {11 BsdVirtualMachine vm = new BsdVirtualMachine(0);12 Properties props = vm.getSystemProperties();13 System.out.println(props);14 vm.close();15 System.out.println("16Connection closed");17 } catch (IOException e) {18 System.out.println("Exception: " + e);19 }20 }21}
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!