[jboss-cvs] JBossAS SVN: r63513 - in projects/aop/trunk/aop/src: resources/test/stress/batf and 4 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Jun 13 18:13:24 EDT 2007
Author: kabir.khan at jboss.com
Date: 2007-06-13 18:13:24 -0400 (Wed, 13 Jun 2007)
New Revision: 63513
Added:
projects/aop/trunk/aop/src/resources/test/stress/batf/
projects/aop/trunk/aop/src/resources/test/stress/batf/jboss-aop.xml
projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/ExtendedSetAccessiblePOJO.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/ReflectionNoSecurityTestCase.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/SamePackageSetAccessiblePOJO.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/setaccessible/
projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/setaccessible/DifferentPackageSetAccessiblePOJO.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/stress/batf/
projects/aop/trunk/aop/src/test/org/jboss/test/aop/stress/batf/BeforeAfterThrowingFinallyVersusAroundTestCase.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/stress/batf/POJO.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/stress/batf/SimpleAspect.java
Log:
Add stress test for before/after/throwing/finally
Added: projects/aop/trunk/aop/src/resources/test/stress/batf/jboss-aop.xml
===================================================================
--- projects/aop/trunk/aop/src/resources/test/stress/batf/jboss-aop.xml (rev 0)
+++ projects/aop/trunk/aop/src/resources/test/stress/batf/jboss-aop.xml 2007-06-13 22:13:24 UTC (rev 63513)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<aop>
+ <aspect class="org.jboss.test.aop.stress.batf.SimpleAspect"/>
+
+ <bind pointcut="execution(* org.jboss.test.aop.stress.batf.POJO->methodWithAroundNoExceptions())">
+ <around aspect="org.jboss.test.aop.stress.batf.SimpleAspect" name="methodWithAroundNoExceptions"/>
+ </bind>
+
+ <bind pointcut="execution(* org.jboss.test.aop.stress.batf.POJO->methodWithBeforeAfter())">
+ <before aspect="org.jboss.test.aop.stress.batf.SimpleAspect" name="before"/>
+ <after aspect="org.jboss.test.aop.stress.batf.SimpleAspect" name="after"/>
+ </bind>
+
+ <bind pointcut="execution(* org.jboss.test.aop.stress.batf.POJO->methodWithAroundExceptions())">
+ <around aspect="org.jboss.test.aop.stress.batf.SimpleAspect" name="methodWithAroundExceptions"/>
+ </bind>
+
+ <bind pointcut="execution(* org.jboss.test.aop.stress.batf.POJO->methodWithBeforeThrowingFinally())">
+ <before aspect="org.jboss.test.aop.stress.batf.SimpleAspect" name="before"/>
+ <throwing aspect="org.jboss.test.aop.stress.batf.SimpleAspect" name="throwing"/>
+ <finally aspect="org.jboss.test.aop.stress.batf.SimpleAspect" name="finaly"/>
+ </bind>
+
+</aop>
+
Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/ExtendedSetAccessiblePOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/ExtendedSetAccessiblePOJO.java (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/ExtendedSetAccessiblePOJO.java 2007-06-13 22:13:24 UTC (rev 63513)
@@ -0,0 +1,132 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.aop.reflection;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+
+import org.jboss.test.aop.reflection.setaccessible.DifferentPackageSetAccessiblePOJO;
+
+/**
+ * @author Jason Hill
+ * @version $Revision: 57688 $
+ */
+public class ExtendedSetAccessiblePOJO extends DifferentPackageSetAccessiblePOJO
+{
+ /**
+ * Test Accessability of visible and non-visible fields
+ */
+ public void testSetAccesible() throws Exception
+ {
+ testSetAccessible(this, "advisedPrivateField", true);
+ // Fix this - still broken with AOP
+ //testSetAccessable(this, "defaultAccessField", true);
+ //testSetAccessable(this, "advisedProtectedField", false);
+ testSetAccessible(this, "advisedPublicField", false);
+ }
+
+ private void testSetAccessible(Object object, String fieldName, boolean illegalAccessExceptionTest) throws Exception
+ {
+ System.out.println("ExtendedSetAccessiblePOJO.testSetAccessible(" +fieldName + ", " + illegalAccessExceptionTest + ")");
+
+ //final Field field = object.getClass().getDeclaredField(fieldName);
+ final Field field = object.getClass().getSuperclass().getDeclaredField(fieldName);
+ final int modifiers = field.getModifiers();
+
+ String fieldAccess;
+
+ if(Modifier.isPublic(modifiers)) fieldAccess = "public";
+ else if(Modifier.isProtected(modifiers)) fieldAccess = "protected";
+ else if(Modifier.isPrivate(modifiers)) fieldAccess = "private";
+ else fieldAccess = "default-access";
+
+ fieldAccess += "/extended-class";
+ //fieldAccess += getClass().getPackage().equals(object.getClass().getPackage())?
+ // "/same-package" : "/different-package";
+
+ if(illegalAccessExceptionTest)
+ {
+ // Verify that an IllegalAccessException is correctly generated
+ // When accessing non-visible fields
+ SetAccessibleAspect.reset();
+
+ String errorGet = "IllegalAccessException should have been thrown because setAccessable had not been called before calling Field.get() on a " + fieldAccess + " field.";
+
+ try
+ {
+ field.get(object);
+ throw new RuntimeException(errorGet);
+ }
+ catch(IllegalAccessException e)
+ {
+ // IllegalAccessException is expected because setAccessable has not been called
+ }
+
+ String errorSet = "IllegalAccessException should have been thrown because setAccessable had not been called before calling Field.set() on a " + fieldAccess + " field.";
+
+ try
+ {
+ field.set(object, "new value");
+ throw new RuntimeException(errorSet);
+ }
+ catch(IllegalAccessException e)
+ {
+ // IllegalAccessException is expected because setAccessable has not been called
+ }
+
+ // Make the field accessable
+ field.setAccessible(true);
+ }
+
+ // Verify that an IllegalAccessException is not generated
+ // when accessing visible fields
+ // or when accessing non-visible fields after calling Field.setAccessable()
+ SetAccessibleAspect.reset();
+
+ String errorGet = "Could not get " + fieldAccess + " field using Field.get()";
+ if(illegalAccessExceptionTest) errorGet += " after calling Field.setAccessable()";
+
+ try
+ {
+ field.get(object);
+ }
+ catch(IllegalAccessException e)
+ {
+ throw new RuntimeException(errorGet);
+ }
+
+ String errorSet = "Could not set " + fieldAccess + " field using Field.set()";
+ if(illegalAccessExceptionTest) errorSet += " after calling Field.setAccessable()";
+
+ try
+ {
+ field.set(object, "new value");
+ }
+ catch(IllegalAccessException e)
+ {
+ throw new RuntimeException(errorSet);
+ }
+
+ // Make sure interception actually occurred
+ SetAccessibleAspect.validateInterception(fieldAccess);
+ }
+}
Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/ReflectionNoSecurityTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/ReflectionNoSecurityTestCase.java (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/ReflectionNoSecurityTestCase.java 2007-06-13 22:13:24 UTC (rev 63513)
@@ -0,0 +1,56 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.aop.reflection;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Completes the ReflectionTester, and runs some tests with no security manager enabled
+ * since the tests have a different ProtectionDomain
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ReflectionNoSecurityTestCase extends TestCase
+{
+ ReflectionPOJO reflectionPOJO;
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite("ReflectionTester");
+ suite.addTestSuite(ReflectionNoSecurityTestCase.class);
+ return suite;
+ }
+ public ReflectionNoSecurityTestCase(String name)
+ {
+ super(name);
+ }
+
+ public void testSetAccessibleField()
+ {
+ System.out.println("RUNNING TEST SET ACCESSIBLE");
+ ReflectionPOJO reflectionPOJO = new ReflectionPOJO();
+ reflectionPOJO.testSetAccessible();
+ }
+
+}
Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/SamePackageSetAccessiblePOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/SamePackageSetAccessiblePOJO.java (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/SamePackageSetAccessiblePOJO.java 2007-06-13 22:13:24 UTC (rev 63513)
@@ -0,0 +1,11 @@
+package org.jboss.test.aop.reflection;
+
+public class SamePackageSetAccessiblePOJO
+{
+ public String advisedPublicField = null;
+
+ @SuppressWarnings("unused")
+ private String advisedPrivateField = null;
+ protected String advisedProtectedField = null;
+ String defaultAccessField = null;
+}
Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/setaccessible/DifferentPackageSetAccessiblePOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/setaccessible/DifferentPackageSetAccessiblePOJO.java (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/reflection/setaccessible/DifferentPackageSetAccessiblePOJO.java 2007-06-13 22:13:24 UTC (rev 63513)
@@ -0,0 +1,37 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.aop.reflection.setaccessible;
+
+/**
+ * @author Jason Hill
+ * @version $Revision: 57688 $
+ *
+ */
+public class DifferentPackageSetAccessiblePOJO
+{
+ public String advisedPublicField = null;
+
+ @SuppressWarnings("unused")
+ private String advisedPrivateField = null;
+ protected String advisedProtectedField = null;
+ String defaultAccessField = null;
+}
Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/stress/batf/BeforeAfterThrowingFinallyVersusAroundTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/stress/batf/BeforeAfterThrowingFinallyVersusAroundTestCase.java (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/stress/batf/BeforeAfterThrowingFinallyVersusAroundTestCase.java 2007-06-13 22:13:24 UTC (rev 63513)
@@ -0,0 +1,160 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.aop.stress.batf;
+
+import org.jboss.test.aop.stress.AbstractScenario;
+import org.jboss.test.aop.stress.ScenarioTest;
+
+/**
+ * Primarily to make sure I got everything right for the generated advisors
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 61751 $
+ */
+public class BeforeAfterThrowingFinallyVersusAroundTestCase extends ScenarioTest
+{
+
+ public static void main(String[] args)
+ {
+ junit.textui.TestRunner.run(BeforeAfterThrowingFinallyVersusAroundTestCase.class);
+ }
+
+
+ public BeforeAfterThrowingFinallyVersusAroundTestCase(String name) throws Exception
+ {
+ super(name);
+ }
+
+ public void testAroundWithNoExceptionScenario() throws Exception
+ {
+ POJO pojo = new POJO();
+ pojo.methodWithAroundNoExceptions();
+ assertTrue(SimpleAspect.before);
+ assertTrue(SimpleAspect.after);
+ assertFalse(SimpleAspect.throwing);
+ assertFalse(SimpleAspect.finaly);
+ getRunner().executeScenario(new AroundWithNoExceptionsScenario());
+ }
+
+ private class AroundWithNoExceptionsScenario extends AbstractScenario
+ {
+ POJO pojo = new POJO();
+
+ public void execute(int thread, int loop) throws Exception
+ {
+ pojo.methodWithAroundNoExceptions();
+ }
+ }
+
+ public void testBeforeAfterThrowingFinallyWithNoExceptionScenario() throws Exception
+ {
+ POJO pojo = new POJO();
+ pojo.methodWithBeforeAfter();
+ assertTrue(SimpleAspect.before);
+ assertTrue(SimpleAspect.after);
+ assertFalse(SimpleAspect.throwing);
+ assertFalse(SimpleAspect.finaly);
+ getRunner().executeScenario(new BeforeAfterThrowingFinallyWithNoExceptionsScenario());
+ }
+
+ private class BeforeAfterThrowingFinallyWithNoExceptionsScenario extends AbstractScenario
+ {
+ POJO pojo = new POJO();
+ public void execute(int thread, int loop) throws Exception
+ {
+ pojo.methodWithBeforeAfter();
+ }
+ }
+
+ public void testAroundWithExceptionScenario() throws Exception
+ {
+ boolean exception = false;
+ try
+ {
+ POJO pojo = new POJO();
+ pojo.methodWithAroundExceptions();
+ assertTrue(SimpleAspect.before);
+ assertFalse(SimpleAspect.after);
+ assertTrue(SimpleAspect.throwing);
+ assertTrue(SimpleAspect.finaly);
+ }
+ catch (Exception e)
+ {
+ exception = true;
+ }
+
+ assertTrue(exception);
+ getRunner().executeScenario(new AroundWithExceptionsScenario());
+ }
+
+ private class AroundWithExceptionsScenario extends AbstractScenario
+ {
+ POJO pojo = new POJO();
+ public void execute(int thread, int loop) throws Exception
+ {
+ try
+ {
+ pojo.methodWithAroundExceptions();
+ }
+ catch(RuntimeException e)
+ {
+
+ }
+ }
+ }
+
+
+ public void testBeforeAfterThrowingFinallyWithExceptionScenario() throws Exception
+ {
+ boolean exception = false;
+ try
+ {
+ POJO pojo = new POJO();
+ pojo.methodWithBeforeThrowingFinally();
+ assertTrue(SimpleAspect.before);
+ assertFalse(SimpleAspect.after);
+ assertTrue(SimpleAspect.throwing);
+ assertTrue(SimpleAspect.finaly);
+ }
+ catch (Exception e)
+ {
+ exception = true;
+ }
+
+ assertTrue(exception);
+ getRunner().executeScenario(new BeforeAfterThrowingFinallyWithExceptionScenario());
+ }
+
+ private class BeforeAfterThrowingFinallyWithExceptionScenario extends AbstractScenario
+ {
+ POJO pojo = new POJO();
+ public void execute(int thread, int loop) throws Exception
+ {
+ try
+ {
+ pojo.methodWithBeforeThrowingFinally();
+ }
+ catch (RuntimeException e)
+ {
+ }
+ }
+ }
+}
Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/stress/batf/POJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/stress/batf/POJO.java (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/stress/batf/POJO.java 2007-06-13 22:13:24 UTC (rev 63513)
@@ -0,0 +1,35 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.aop.stress.batf;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class POJO
+{
+ public void methodWithAroundNoExceptions() {}
+ public void methodWithBeforeAfter() {}
+ public void methodWithAroundExceptions(){throw new RuntimeException();}
+ public void methodWithBeforeThrowingFinally(){throw new RuntimeException();}
+}
Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/stress/batf/SimpleAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/stress/batf/SimpleAspect.java (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/stress/batf/SimpleAspect.java 2007-06-13 22:13:24 UTC (rev 63513)
@@ -0,0 +1,96 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.aop.stress.batf;
+
+import org.jboss.aop.joinpoint.Invocation;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class SimpleAspect
+{
+ public static boolean before;
+ public static boolean after;
+ public static boolean throwing;
+ public static boolean finaly;
+
+ public Object methodWithAroundNoExceptions(Invocation inv) throws Throwable
+ {
+ try
+ {
+ before = true;
+ return inv.invokeNext();
+ }
+ finally
+ {
+ after = true;
+ }
+ }
+
+ public Object methodWithAroundExceptions(Invocation inv) throws Throwable
+ {
+ try
+ {
+ before = true;
+ return inv.invokeNext();
+ }
+ catch(Exception e)
+ {
+ throwing = true;
+ throw e;
+ }
+ finally
+ {
+ finaly = true;
+ }
+ }
+
+ public void before()
+ {
+ before = true;
+ }
+
+ public void after()
+ {
+ after = true;
+ }
+
+ public void throwing()
+ {
+ throwing = true;
+ }
+
+ public void finaly()
+ {
+ finaly = true;
+ }
+
+ public void reset()
+ {
+ before = false;
+ after = false;
+ throwing = false;
+ finaly = false;
+ }
+}
More information about the jboss-cvs-commits
mailing list